Donc, en gros, disons que j'ai un tableau appelé "ventes" répertoriant toutes les ventes effectuées dans une boutique.
Pour faire simple, nous allons garder trois colonnes:
VENDOR COUNT(VENDOR) 1 Camille 3 2 Delphine 2 3 Lucas 2 4 Penelope 2 5 Rudy 3
J'essaie simplement de résumer les ventes de chaque fournisseur pour une période de temps donnée. Alors naturellement, j'essaye d'utiliser une fonction count () avec une instruction "group by":
select vendor, count(vendor) from sales where vendor in ('Camille', 'Lucas', 'Delphine', 'Rudy', 'Penelope', 'Alice') group by vendor order by vendor;
Le résultat est le suivant:
SALE_ID DATE_SALE VENDOR 1 101 2019/01/01 Camille 2 102 2019/01/01 Lucas 3 103 2019/01/02 Rudy 4 104 2019/01/01 Lucas 5 105 2019/01/01 Delphine 6 106 2019/01/03 Penelope 7 107 2019/01/02 Rudy 8 108 2019/01/03 Delphine 9 109 2019/01/03 Camille 10 110 2019/01/04 Rudy 11 111 2019/01/02 Camille 12 112 2019/01/04 Penelope
3 Réponses :
Je rejoindrais la table vendors
comme ceci:
select v.vendor, count(s.vendor) from vendors v left outer join sales s on (s.vendor = v.vendor) where v.vendor in ('Camille', 'Lucas', 'Delphine', 'Rudy', 'Penelope', 'Alice') group by v.vendor order by v.vendor;
En supposant que vous ayez une table nommée vendors
avec tous les fournisseurs (y compris Alice) là-dedans.
Vous devez commencer par fournisseurs
et jointure gauche
pour ventes
... Ou vous pouvez utiliser une jointure droite
, mais je trouve celles-ci moins intuitives ...
Étant donné votre commentaire selon lequel vous ne pouvez pas avoir de table fournisseurs
, voici une approche alternative qui en crée une pour vous, puis utilise une jointure externe
pour inclure Alice
:
select t.name, count(s.vendor) as thecount from (select column_value name from table(sys.dbms_debug_vc2coll('Camille', 'Lucas', ..., 'Alice'))) t left join sales s on t.name = s.vendor group by t.name
Remarque, il existe plusieurs façons de créer la fausse table. Cela utilise une procédure intégrée à laquelle vous devez avoir accès. Vous pouvez également être plus explicite et le définir en utilisant union all
.
En supposant que vous ne disposez pas d'une table VENDOR
, vous pouvez utiliser une vue en ligne pour générer vos noms de fournisseurs:
WITH cteVendors as (SELECT 'Camille' AS VENDOR FROM DUAL UNION ALL SELECT 'Lucas' AS VENDOR FROM DUAL UNION ALL SELECT 'Delphine' AS VENDOR FROM DUAL UNION ALL SELECT 'Rudy' AS VENDOR FROM DUAL UNION ALL SELECT 'Penelope' AS VENDOR FROM DUAL UNION ALL SELECT 'Alice' AS VENDOR FROM DUAL) SELECT v.VENDOR, COUNT(s.VENDOR) FROM cteVendors v LEFT OUTER JOIN SALES s ON s.VENDOR = v.VENDOR GROUP BY v.VENDOR ORDER BY v.VENDOR
Vous devriez avoir une table avec tous les vendeurs. Quel est son nom et sa structure?