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.