{Oracle} Deux COUNT dans une seule requête

Fermé
EvilJajuka - 29 sept. 2009 à 06:34
Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 - 29 sept. 2009 à 12:09
Bonjour,

Voilà mon problème, pour un cours, je dois écrire une requête SQL qui renvoie 2 colonnes. La première colonne affichera le nombre d'articles qui ont été commandé 6+ fois et la deuxième colonnes, les articles qui ont été commandé moins de 2 fois.

La requête qui permet d'avoir le nombre de fois que chaque article à été commandé est la suivante :
SELECT noArticle, CASE WHEN SUM(quantite) IS NULL THEN 0 ELSE SUM(quantite) END AS quantiteTotale 
FROM Article NATURAL LEFT OUTER JOIN LigneCommande 
GROUP BY noArticle


Maintenant, je ne sais plus trop quoi faire pour pouvoir afficher mes 2 colonnes. J'ai essayé ceci, mais j'obtiens seulement une colonne (articlesImpopulaires) avec 2 lignes au lieu de 2 colonnes avec une lignes.
SELECT COUNT(*) AS articlesImpopulaires 
FROM 
     (SELECT noArticle 
      FROM Article NATURAL LEFT OUTER JOIN LigneCommande 
      GROUP BY noArticle 
      HAVING CASE WHEN SUM(quantite) IS NULL THEN 0 ELSE SUM(quantite) END < 2) 
      UNION 
      SELECT COUNT(*) AS articlesPopulaires 
      FROM 
     (SELECT noArticle FROM Article NATURAL LEFT OUTER JOIN LigneCommande GROUP BY noArticle 
      HAVING  SUM(quantite) > 5)


La sortie devrait être comme ça :
NOMBREPOPULAIRES NOMBREIMPOPULAIRES                                             
-------------- -----------------                                            
          3                  4  


mais moi j'obtiens ça :
NOMBREIMPOPULAIRES                                              
------------------                                             
          3                  
          4      


Merci à l'avance :)

1 réponse

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 383
29 sept. 2009 à 12:09
Bonjour,

Le code suivant devrait faire ce que tu veux
SELECT COUNT(*) AS articlesImpopulaires 
FROM (SELECT noArticle FROM Article NATURAL LEFT OUTER JOIN LigneCommande GROUP BY noArticle HAVING CASE WHEN SUM(quantite) IS NULL THEN 0 ELSE SUM(quantite) END < 2) , SELECT COUNT(*) AS articlesPopulaires FROM (SELECT noArticle FROM Article NATURAL LEFT OUTER JOIN LigneCommande
GROUP BY noArticle HAVING  SUM(quantite) > 5)

J'ai remplacé UNION par une virgule
J'ai pas testé, à toi de voir.
A plus
0