Musíte použít GROUP BY
vysvětlit, na základě jakých seskupení počítat. Bez GROUP BY
získáte pouze jednu skupinu celé sady výsledků, jak jste viděli.
Ve standardním SQL je nutné zahrnout do GROUP BY
klauzule každý neagregovaný výraz, který je součástí SELECT
klauzule, ale MySQL vám umožní vyhnout se tomu, že to neuděláte, a umožní vám výraz, jako je následující. (Přinejmenším, když ne v přísném režimu; nejsem si jistý, zda přísný režim posiluje tento požadavek, aby odpovídal standardnímu SQL)
SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`
Za předpokladu, že items.id
je primární klíč této tabulky, a proto se nezobrazí ve více než jednom řádku items
, mělo by to mít požadovaný účinek.
Jakmile zavedete GROUP BY
je důležité pochopit rozdíl mezi WHERE
a HAVING
doložky. První použije podmínku před skupina a agregace se použijí, zatímco druhé se použijí potom . To znamená, že musíte použít HAVING
pokud chcete provést podmínku založenou na tomto počtu; WHERE
klauzule ve vašem původním příkladu bude platit před agregací, takže výsledkem bude počet bodů vytvořených po daném datu.