J'ai trois tables Compteinales & Icecream. Dans le but de comprendre, il y a une crème glacée dans chaque vente.
SELECT C.postcode, COUNT(*) AS TOTAL SALES
FROM CustomerSales C OUTER LEFT JOIN IceCream I
ON C.icecreamID = I.id AND
WHERE I.name = "Chocolate" AND C.saleyear = "2019"
GROUP BY C.postcode;
5 Réponses :
Comptez le commandant, au lieu de *, je pense que cela devrait renvoyer les résultats attendus:
SELECT C.postcode, COUNT(C.PurchaseId) AS TOTAL SALES FROM CustomerSales C OUTER LEFT JOIN IceCream I ON C.icecreamID = I.id AND WHERE I.name = "Chocolate" AND C.saleyear = "2019" GROUP BY C.postcode;
et où code> n'est pas une syntaxe valide, il est donc plutôt mystérieux que cette réponse soit acceptée.
Certes, j'aurais dû payer plus d'attention. Merci d'avoir fait remarquer cela.
SELECT C.postcode, COUNT(*) AS TOTAL_SALES FROM CustomerSales C JOIN IceCream I ON C.icecreamID = I.id AND WHERE I.name = "Chocolate" AND C.saleyear = "2019" GROUP BY C.postcode union select c.postcode, '0' as TOTAL_SALES FROM CUSTOMERSALES C where c.postcode not in(select cs.postcode from FROM CustomerSales C JOIN IceCream I ON C.icecreamID = I.id AND WHERE I.name = "Chocolate" AND C.saleyear = "2019" );
Problème Je vois, c'est que vous faites une jointure puis comptant le nombre d'enregistrements renvoyés afin que les enregistrements par défaut qui n'ont pas de ventes ne se terminent pas dans la jointure.
Le type de jointure est important ici, je pense que la jointure à gauche montrera à tous Données de la première table, même si aucune donnée n'est trouvée dans la table jointe, vous compterez ensuite les champs de la table jointe, qui retournera NULL si aucun n'est trouvé p>
quelque chose comme ceci: P>
SELECT C.postcode, COUNT(I.name) AS TOTAL SALES FROM CustomerSales C LEFT JOIN IceCream I ON C.icecreamID = I.id AND WHERE I.name = "Chocolate" AND C.saleyear = "2019" GROUP BY C.postcode;
Si vous voulez tous em> les codes postaux, vous devez faire un gauche code> rejoindre le
distinct code> Codes postaux sur
Communérosales Code> puis à
Code ICECREAM CODE>:
SELECT p.postcode, COUNT(C.PurchaseId) AS TOTAL_SALES
FROM (
SELECT DISTINCT postcode
FROM CustomerSales
) p LEFT JOIN CustomerSales C
ON C.postcode = p.postcode AND C.saleyear = '2019'
LEFT JOIN IceCream I ON C.icecreamID = I.id AND I.name = 'Chocolate'
GROUP BY p.postcode;
juste pour être clair, vous souhaitez utiliser un rejoindre code>, déplacez la condition sur
i code> dans la clause code> sur code> et modifiez le Nombre () Code>:
SELECT C.postcode, COUNT(i.id) AS TOTAL SALES
FROM CustomerSales C LEFT JOIN
IceCream I
ON C.icecreamID = I.id AND
I.name = 'Chocolate'
WHERE C.saleyear = 2019
GROUP BY C.postcode;