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 :

Problème écriture sous-requete


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut Problème écriture sous-requete
    Bonjour,
    J'essaie d'écrire une requete sql avec une sous requete et je ne parvient pas à la faire passer dans phpmyadmin. c'est la première fois que j'écrit une requete avec une sous-requete dedans (en général je fait des bidouilles avec php). Voila ou j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT Count(album) as nombre
    FROM (
           SELECT DISTINCT album, artist
           FROM tags
           GROUP BY artist
           HAVING artist = 1
    )
    En fait j'ai la table tags avec un enregistrement par piste.
    dans chaque enregistrement, il y a un champs artist et album.
    Donc il y a plusieurs fois le meme artiste dans la table et plusieurs fois le meme album.
    J'aimerais déterminer le nombre d'album d'un artiste avec cette table, mais il doit y avoir une erreur que je ne trouve pas puisque phpmyadmin ne veut pas l'exécuter.

    Merci d'avance pour votre aide

    ++

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: Problème écriture sous-requete
    Les sous-requêtes ne sont acceptées qu'à partir de la version 4.1.

    De plus, il vaut mieux les éviter quand on le peut, question de performance. Essaye ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT artist, COUNT(DISTINCT album) AS nombre
    FROM tags
     
    WHERE artist = 1
    GROUP BY artist

  3. #3
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Ah merci, j'avais essayé SELECT DISTINCT COUNT()... avant de tenter avec les sous requetes, maintenant je saurais exactement comme fonctionne le DISTINCT.

    Merci bcp

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    pcaboche >>Un détail : A quoi sert le si ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(DISTINCT album) AS nombre 
    FROM tags 
    WHERE artist = 1

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Bonne question Médiat, pour utiliser une fonction d'aggrégation (comme le COUNT), tu es bien obligé de faire un GROUP BY, sinon, tu pourrais avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    artiste1  album1
    artiste1  album2
    artiste1  album3
    artiste1  album4
    et dans ce cas là , sur quoi porte le COUNT? hein?

    C'est pas moi qui le dit, c'est MySQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     MySQL a répondu:
     
    #1140 - Mélanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY
    Je prévois le cas où l'on voudrait changer la condition WHERE pour avoir plusieurs artiste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE artist = 1 OR artist = 2

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par pcaboche
    Bonne question Médiat, pour utiliser une fonction d'aggrégation (comme le COUNT), tu es bien obligé de faire un GROUP BY
    Non, rien ne t'interdit de calculer un agrégat sur un seul ensemble (c'est le cas ici, ou dans SELECT COUNT(*) FROM laTable).

    Citation Envoyé par pcaboche
    sinon, tu pourrais avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    artiste1  album1
    artiste1  album2
    artiste1  album3
    artiste1  album4
    et dans ce cas là , sur quoi porte le COUNT? hein?
    Sur l'ensemble des lignes où artist = artiste1, donc la réponse est 4.

    Citation Envoyé par pcaboche
    C'est pas moi qui le dit, c'est MySQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     MySQL a répondu:
     
    #1140 - Mélanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY
    C'est bien pour cela que je n'ai pas mis artist dans le SELECT

    Citation Envoyé par pcaboche
    Je prévois le cas où l'on voudrait changer la condition WHERE pour avoir plusieurs artiste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE artist = 1 OR artist = 2

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

Discussions similaires

  1. problème avec sous requete
    Par Jérémy Lefevre dans le forum Requêtes
    Réponses: 15
    Dernier message: 06/09/2007, 16h03
  2. Problème de sous requete
    Par Celia1303 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/04/2006, 15h35
  3. Problème de perfs Sous requetes IN
    Par ias83 dans le forum SQL
    Réponses: 4
    Dernier message: 15/06/2005, 12h39
  4. Problème de sous-requete.
    Par Oberown dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2004, 16h44
  5. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36

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