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 :

count et group by


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Par défaut count et group by
    Bonjour,
    j'aimerais effectuer une requête un peu spéciale mais je n'y arrive pas.
    je me trouve avec 3 tables
    User Transaction et UserTransaction.
    les champs qui nous intéressent sont id dans User, id dans Transaction et idUser et idTransaction dans UserTransaction.
    UserTransaction permet donc de faire une relation ManyToMany entre User et Transaction

    Ce que je voudrais pouvoir faire c'est une requête qui me sort pour chaque ligne de UserTransaction le idUser, le idTransaction et le nombre de UserTransaction avec cet idTransaction

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT T.id, UT.idUser, 
    		(SELECT count(id) FROM  UserTransaction AUT where AUT.idTransaction=T.id) 
    	FROM Transaction T, UserTransaction UT 
    	WHERE T.id=UT.idTransaction;
    mais j'ai l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
    j'ai aussi tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T.id, UT.idUser, count(*)
    	FROM Transaction T, UserTransaction UT  
    	GROUP BY T.id;
    qui ne me donne pas le résultat souhaité.

    j'ai également essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T.id, UT.idUser,  
    		(SELECT count(id) FROM UserTransaction AUT WHERE AUT.idTransaction=T.id) 
    	FROM Transaction T, UserTransaction UT  
    	GROUP BY T.id;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T.id, UT.idUser,  
    		MAX((SELECT count(id) FROM UserTransaction AUT WHERE AUT.idTransaction=T.id))
    	FROM Transaction T, UserTransaction UT  
    	GROUP BY T.id;
    qui me donnent les erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1242 (21000): Subquery returns more than 1 row
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1111 (HY000): Invalid use of group function
    Si quelqu'un a une idée de ce qui pourrait résoudre mon problème je suis preneur

    Merci
    Frol

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    une jointure ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T.id, UT.idUser, count(*)
    FROM Transaction T
      INNER JOIN UserTransaction UT ON UT.idTransaction=T.id
    GROUP BY T.id, UT.idUser;

  3. #3
    Membre expérimenté Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Par défaut
    Chose étonnante ça marche si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T.id, UT.idUser, count(*)
    FROM Transaction T
      INNER JOIN UserTransaction UT ON UT.idTransaction=T.id
    GROUP BY T.id;
    donc uniquement T.id dans le group by

    maintenant si il m'est encore permis je me demande si il est possible de faire le même travail mais d'"ajouter un fitre pour n'avoir que les résultat avec un certain idUser.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    Citation Envoyé par frol Voir le message
    Chose étonnante ça marche si on fait

    donc uniquement T.id dans le group by
    oui, c'est une spécificité de MySQL, qui jette un certain doute sur le déterminisme de la requête, puisque MySQL prendra la première idUser venue.
    Citation Envoyé par frol Voir le message
    maintenant si il m'est encore permis je me demande si il est possible de faire le même travail mais d'ajouter un fitre pour n'avoir que les résultat avec un certain idUser.
    Par exemple l'idUser 6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T.id, UT.idUser, count(*)
    FROM Transaction T
      INNER JOIN UserTransaction UT ON UT.idTransaction=T.id
    WHERE UT.idUser = 6
    GROUP BY T.id;

  5. #5
    Membre expérimenté Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Par défaut
    le problème c'est que cela affecte le count.
    Ce qu'il faudra c'est après la requête mettre un filtre.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 290
    Par défaut
    Citation Envoyé par frol Voir le message
    le problème c'est que cela affecte le count.
    Ce qu'il faudra c'est après la requête mettre un filtre.
    euh... je crois que j'ai raté un truc là

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2007, 16h36
  2. [requete] Probleme de COUNT() et GROUP BY
    Par cadoudal56 dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/12/2006, 19h23
  3. problème count et group by
    Par zulkifli dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/11/2006, 04h53
  4. Requête récalcitrante avec un tri par COUNT sans GROUP BY
    Par Ancalagon77 dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/10/2006, 14h27
  5. Pb de COUNT et GROUP BY simple mais sans requête imbriquées
    Par vanquish dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/10/2004, 09h45

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