Při používání GROUP BY
musíte být opatrní . Jakmile pochopíte, co GROUP BY
ano, problém poznáte sami. Provádí agregaci vašich dat nebo jinými slovy redukuje vaše data tím, že provádí určitou operaci s nezpracovanými položkami a vytváří nový redukovaný počet položek, na které byla použita nějaká agregační funkce (SUM, COUNT, AVG atd.)
Pole, která zadáte v GROUP BY
klauzule představuje úroveň agregace/souhrnu, o kterou usilujete.
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
Zde se pokoušíte provést agregaci na col1
level, což znamená, že pro každou odlišnou hodnotu ve sloupci col1
, bude provedena určitá operace na některých dalších sloupcích, které zadáte v SELECT
klauzule (zde col2
,col3
), takže ve výstupu máte neopakující se hodnoty v col1
a některé shrnuté hodnoty col2
a col3
proti každému odlišnému col1
hodnotu podle toho, jakou funkci použijete (SUM, COUNT, AVG atd.).
Jak tuto funkci aplikujete? To je to, co ve vašem výše uvedeném dotazu chybí. Chcete-li to vyřešit, musíte použít nějakou agregační funkci na pole, která jsou přítomna v SELECT
klauzule, ale ne v GROUP BY
doložka. Vezmeme-li příklad SUM, zkuste toto:
SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
NEBO pro lepší představu odstraňte WHERE
filtr a kontrolu výstupu spuštěním:
SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1
Navíc důvod, proč váš druhý dotaz
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
fungovalo proto, že na pole nemusíte aplikovat agregaci (zde col2
), který je přítomen v GROUP BY
klauzule.