Трябва да използвате GROUP BY
за да обясните въз основа на какви групи да се брои. Без GROUP BY
получавате само една група от целия набор от резултати, както видяхте.
В стандартния SQL е необходимо да се включи в GROUP BY
клауза всеки неагрегиран израз, който е включен в SELECT
клауза, но MySQL ви позволява да не правите това, позволявайки израз като следния. (Поне, когато не е в строг режим; не съм сигурен дали стриктният режим засилва това изискване, за да съответства на стандартния SQL)
SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`
Ако приемем, че items.id
е първичният ключ на тази таблица и затова няма да се появи в повече от един ред items
, това трябва да има желания ефект.
След като въведете GROUP BY
важно е да разберете разликата между WHERE
и HAVING
клаузи. Първият прилага условието преди групата и агрегатите се прилагат, докато последното се прилага след това . Това означава, че трябва да използвате HAVING
ако искате да направите условно въз основа на този брой; WHERE
Клаузата в първоначалния ви пример ще се прилага преди агрегата, така че резултатът ще бъде броят на точките, създадени след дадена дата.