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;