IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Syntaxe d'une requête avec GROUP


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut Syntaxe d'une requête avec GROUP
    Bonjour à tous,

    Soit la table suivante, décrivant des jours de travail se rapportant à des "activités":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    mysql> SELECT * FROM test ;
    +---------+-------------+------------+-------+------+
    | id_date | id_activity | date       | hours | type |
    +---------+-------------+------------+-------+------+
    |       1 |           1 | 2006-08-15 |     5 | C    |
    |       2 |           1 | 2006-10-01 |     3 | P    |
    |       3 |           2 | 2006-09-31 |     2 | C    |
    |       4 |           2 | 2006-10-01 |     5 | P    |
    +---------+-------------+------------+-------+------+
    Je souhaite obtenir le total des heures travaillées pour chaque activité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    mysql> SELECT id_activity,date,SUM(heures) FROM test GROUP BY
    id_activity;
    +-------------+------------+------------+
    | id_activity | date       | SUM(hours) |
    +-------------+------------+------------+
    |           1 | 2006-08-15 |          8 |
    |           2 | 2006-09-31 |          7 |
    +-------------+------------+------------+
    2 rows in set (0.01 sec)
    Jusque là, ça va, mais je me demande comment se fait la sélection de la date retenue pour chaque activité: s'agit-il de la première selon l'ordre de la clé primaire (soit ici id_date) ?
    À présent, je souhaite obtenir le même résultat, mais en choisissant la date, parmi les lignes regroupées) en fonction du "type". Est-ce possible ?

    En poussant les choses un peu plus loin, est-il possible de choisir la date la plus ancienne ou la plus récente, toujours parmi les lignes ainsi regroupées ?

    Merci d'avance,

    Gvdmoort

  2. #2
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Ca ne va pas avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id_activity,date,SUM(heures) FROM test WHERE type = 'P' 
    GROUP BY id_activity;
    Idem avec la date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id_activity,date,SUM(heures) FROM test WHERE date= '2006-10-08' 
    GROUP BY id_activity;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 87
    Points
    87
    Par défaut Non, ça ne va pas...
    Citation Envoyé par Ancalagon77
    Ca ne va pas avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id_activity,date,SUM(heures) FROM test WHERE type = 'P' 
    GROUP BY id_activity;
    Idem avec la date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id_activity,date,SUM(heures) FROM test WHERE date= '2006-10-08' 
    GROUP BY id_activity;
    Faute de point d'interrogation, j'ignore s'il s'agit d'une question ou d'une constatation

    Mais non, ça ne va pas ; en ajoutant un WHERE, on limite les lignes à cette clause, et puis on les regroupe. Donc ici le total n'est pas fait sur toutes les lignes partageant la même "id_activity", mais uniquement sur celle(s) ayant le "type" 'P'. Ce n'est pas ce que je souhaite. Je souhaite retenir un champs particulier parmi ceux qui sont regroupés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    mysql> SELECT id_activity,date,SUM(heures) FROM test GROUP BY id_activity;
    +-------------+------------+-------------+
    | id_activity | date       | SUM(heures) |
    +-------------+------------+-------------+
    |           1 | 2006-08-15 |           8 |
    |           2 | 2006-09-31 |          17 |
    +-------------+------------+-------------+
    2 rows in set (0.00 sec)
     
    mysql> SELECT id_activity,date,SUM(heures) FROM test WHERE type ='P' GROUP BY id_activity;
    +-------------+------------+-------------+
    | id_activity | date       | SUM(heures) |
    +-------------+------------+-------------+
    |           1 | 2006-08-15 |           5 |
    |           2 | 2006-09-31 |           2 |
    +-------------+------------+-------------+
    2 rows in set (0.00 sec)
    Une autre proposition ?

Discussions similaires

  1. [Débutant] Erreur dans une requête avec group by
    Par abd75web dans le forum Linq
    Réponses: 2
    Dernier message: 19/05/2015, 16h11
  2. [AC-2007] Besoin d'aide avec syntaxe d'une requête
    Par java250r dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/05/2012, 20h18
  3. Réponses: 16
    Dernier message: 20/01/2011, 12h45
  4. Réponses: 6
    Dernier message: 30/01/2008, 22h20
  5. requête avec group by
    Par Staron dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/11/2004, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo