Трябва да внимавате, когато използвате GROUP BY
. След като разберете какво е GROUP BY
прави, вие сами ще знаете проблема. Той извършва агрегиране на вашите данни или с други думи, намалява вашите данни, като извършва някаква операция върху необработените записи и създава нов намален брой записи, към които е приложена някаква функция за агрегиране (SUM, COUNT, AVG и т.н.)
Полетата, които предоставяте в GROUP BY
клаузата представлява нивото на агрегиране/събиране, към което се стремите.
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
Тук се опитвате да направите агрегацията в col1
ниво, което означава, че за всяка отделна стойност, присъстваща в колона col1
, ще има някаква операция, извършена върху някои други колони, които предоставяте в SELECT
клауза (тук col2
,col3
), така че в изхода да имате неповтарящи се стойности в col1
и някои събрани стойности на col2
и col3
срещу всеки отделен col1
стойност въз основа на функцията, която прилагате (SUM, COUNT, AVG и т.н.).
Как прилагате тази функция? Това е, което липсва в горната ви заявка. За да го разрешите, трябва да приложите някаква функция за агрегиране върху полетата, които присъстват в SELECT
клауза, но не и в GROUP BY
клауза. Като вземем пример за SUM, опитайте това:
SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
ИЛИ за по-добра идея премахване на WHERE
филтър и проверка на изхода, като изпълните:
SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1
Освен това причината за другата ви заявка
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
работи, защото не е необходимо да прилагате агрегиране към полето (тук col2
), който присъства в GROUP BY
клауза.