Musisz użyć GROUP BY wyjaśnić, na podstawie jakich grup należy liczyć. Bez GROUP BY po prostu otrzymujesz pojedynczą grupę z całego zestawu wyników, jak widziałeś.
W standardowym SQL konieczne jest uwzględnienie w GROUP BY klauzula każdego wyrażenia niezagregowanego, które jest zawarte w SELECT klauzula, ale MySQL pozwala ci tego nie robić, pozwalając na wyrażenie podobne do poniższego. (Przynajmniej, gdy nie jest w trybie ścisłym; nie jestem pewien, czy tryb ścisły wzmacnia to wymaganie, aby dopasować standardowy SQL)
SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`
Zakładając, że items.id jest kluczem podstawowym tej tabeli, więc nie pojawi się w więcej niż jednym wierszu items , powinno to przynieść pożądany efekt.
Po wprowadzeniu GROUP BY ważne jest, aby zrozumieć różnicę między WHERE i HAVING klauzule. Pierwszy stosuje warunek przed grupa i agregaty są stosowane, a druga stosuje się później . Oznacza to, że musisz użyć HAVING jeśli chcesz wykonać warunkowy na podstawie tej liczby; WHERE klauzula w twoim początkowym przykładzie będzie obowiązywać przed sumą, więc wynikiem będzie liczba punktów utworzonych po podanej dacie.