Mysql
 sql >> база данни >  >> RDS >> Mysql

Заявката с GROUP BY и ORDER BY не работи, когато са избрани няколко колони в SELECT

Трябва да внимавате, когато използвате 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 клауза.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. обобщена таблица в mysql

  2. Получаване на последната въведена стойност в Yii

  3. Не може да се инсталира MySQL на Mac OS X

  4. Django + MySQL - Администраторски сайт - Добавяне на потребител - OperationalError - SAVEPOINT не съществува

  5. Решения за мащабиране за MySQL (репликация, клъстериране)