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

Langage SQL Discussion :

Problème avec fonction count si 0


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Par défaut Problème avec fonction count si 0
    Bonjour,

    Ma requête suivante :

    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
    SELECT c.customers_gender, c.customers_firstname, 
      c.customers_lastname, c.customers_dob, c.customers_email_address, 
      ci.customers_info_date_of_last_logon, 
      count(o.orders_id) NbCommande, 
      sum(ot.value) TotalCommande, 
      max(o.date_purchased) DerniereCommande
     
    FROM customers_info ci, customers c
     
    RIGHT JOIN (orders_total ot, orders o) 
      ON (ot.class ='ot_total' 
        and ot.orders_id = o.orders_id 
        and c.customers_id = o.customers_id)
     
    WHERE c.customers_newsletter=1 
      AND c.customers_id = ci.customers_info_id
     
    GROUP BY c.customers_gender, c.customers_firstname, c.customers_lastname, c.customers_dob, c.customers_email_address

    ne me retourne pas de résultats pour toutes mes lignes ou mon count(o.orders_id) = 0.

    Je pense que mon pb vient de la syntaxe de ma jointure.

    Je tourne en rond depuis plusieurs heures. Si quelqu'un à une idée, je suis preneur.

    Merci :-)

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par biboulie Voir le message
    Je pense que mon pb vient de la syntaxe de ma jointure.
    C'est sûr qu'en mélangeant la vielle syntaxe obsolète depuis 1992 et la syntaxe normalisée depuis 18 ans, tu peux t'emmêler les doigts !

    En plus tu essaies de faire deux jointures externes en une seule et tu as aussi oublié une colonne dans le GROUP BY.

    Essaie comme ça :
    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
    SELECT c.customers_gender, c.customers_firstname, 
      c.customers_lastname, c.customers_dob, c.customers_email_address, 
      ci.customers_info_date_of_last_logon, 
      COALESCE(COUNT(o.orders_id), 0) NbCommande, 
      COALESCE(SUM(ot.value), 0) TotalCommande, 
      MAX(o.date_purchased) DerniereCommande
    FROM customers c
    INNER JOIN customers_info ci ON c.customers_id = ci.customers_info_id
    LEFT OUTER JOIN orders o ON c.customers_id = o.customers_id
      LEFT OUTER JOIN orders_total ot 
        ON ot.orders_id = o.orders_id
        AND ot.class ='ot_total'
    WHERE c.customers_newsletter = 1
    GROUP BY c.customers_gender, c.customers_firstname, c.customers_lastname, 
      c.customers_dob, c.customers_email_address, ci.customers_info_date_of_last_logon
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Par défaut
    Bon ben déjà ma requête sera plus propre, merci

    Cela dit, la requête que tu m'as donné tourne en boucle.

    Bizarre, ça fait 10 minutes quelle tourne sans me retourner de résultats !

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tes tables sont indexées ?

    J'ai construit les jointures sur l'hypothèse qu'il peut y avoir des customers sans orders et pas l'inverse.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Par défaut
    Oui il peut y avoir des customers sans orders mais pas l'inverse !
    (sauf effacement par erreur)

    Bizarre !

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Bis repetita :
    Tes tables sont indexées ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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