Du skal bruge GROUP BY
at forklare hvilke grupperinger der skal tælles ud fra. Uden GROUP BY
du får bare en enkelt gruppe af hele resultatsættet, som du så.
I standard SQL er det nødvendigt at inkludere i GROUP BY
klausul hvert ikke-aggregeret udtryk, der er inkluderet i SELECT
klausul, men MySQL lader dig slippe af sted med ikke at gøre dette, hvilket tillader et udtryk som det følgende. (I hvert fald, når den ikke er i streng tilstand; jeg er ikke sikker på, om streng tilstand styrker dette krav til at matche standard SQL)
SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`
Forudsat at items.id
er den primære nøgle i denne tabel, og den vises derfor ikke i mere end én række elementer
, bør dette have den ønskede effekt.
Når du introducerer GROUP BY
det er vigtigt at forstå forskellen mellem WHERE
og HAR
klausuler. Førstnævnte anvender betingelsen før gruppen og aggregater anvendes, mens sidstnævnte gælder bagefter . Det betyder, at du skal bruge HAVING
hvis du vil lave en betinget baseret på denne optælling;