Трябва да използвате 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 Клаузата в първоначалния ви пример ще се прилага преди агрегата, така че резултатът ще бъде броят на точките, създадени след дадена дата.