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

Групирайте редовете с помощта на клауза Group By в MySQL

Този урок е част от поредицата Научете основни SQL заявки с помощта на MySQL. В този урок ще обсъдим SQL заявки за извършване на групиране на редовете на таблицата в MySQL с помощта на клаузата GROUP BY с агрегатните функции. Можете също да следвате Използване на агрегатни функции (SUM, AVG, MAX, MIN, COUNT, DISTINCT) в MySQL, за да научите агрегатните функции.

Групиране по заявка

ГРУПА ПО клаузата може да се използва за групиране на редовете на таблицата. Може да се използва и с обобщаващите функции за генериране на отчети и за събиране на статистически данни.

# GROUP BY - Синтаксис
SELECT column_1, column_2, ..., [ AS ] FROM `table_name` GROUP BY column_1, column_2, ...;

Обяснение на заявката

ГРУПА ПО Клаузата може да се използва за групиране на редовете чрез посочване на колоните за формиране на набора от редове.

Можем да използваме агрегатни функции, за да използваме ефективно клаузата GROUP BY за генериране на отчети и за събиране на статистически данни.

Групирането може да се приложи върху множество колони, където първата колона ще образува основната група, а следващите колони ще образуват подгрупи.

Примери

Този раздел предоставя примери за извършване на групиране с помощта на клаузата GROUP BY със и без функции за агрегиране. Използвайте посочената по-долу заявка, за да създадете потребителска таблица с идентификатор, собствено име, фамилия, възраст и активни колони за съхраняване на потребителски данни.

# Създаване на потребителската таблица
СЪЗДАВАНЕ НА ТАБЛИЦА `enterprise`.`user` (
`user_id` BIGINT NOT NULL,
`first_name` VARCHAR(45) ,
` фамилия` VARCHAR(45),
`възраст` SMALLINT(6) НЕ НУЛА ПО ПОДРАЗБИРАНЕ 0,
`активен` TINYINT(1) НЕ НУЛА ПО ПОДРАЗБИРАНЕ 0,
ПЪРВЕН КЛЮЧ (`user_id`) );

Посочената по-долу заявка може да се използва за вмъкване на тестови данни в потребителската таблица.

# Вмъкване на редове - Всички колони
ВМЕСЕТЕ В `user` ( `user_id`, `first_name`, `last_name`, `age`, `active` ) VALUES
( 1, 'John' , 'Смит', 18, 1 ),
( 2, 'Рик', 'Джоунс', 19, 1 ),
( 3, 'Джон', 'Понтинг', 16, 0 ),
( 4, 'Harsh', 'Upadhyay', 20, 1 ),
( 5, 'Tajwinder', 'Singh', 18, 0 );

Гореспоменатата заявка ще вмъкне 5 реда в таблицата с идентификатор, собствено име, фамилия и активни колони, за да представят 5 различни потребители.

Сега ще използваме клаузата GROUP BY без агрегатните функции за групиране на редовете. Може да се направи с помощта на клаузата GROUP BY в MySQL, както е показано по-долу.

# GROUP BY - Генериране на набор от активни стойности
SELECT активен от потребител GROUP BY active;

# Резултат
1
0

# GROUP BY - Генерирайте набора от собствено име
ИЗБЕРЕТЕ име от потребителя GROUP BY first_name;

# Резултат
Джон
Рик
Харш
Таджуиндер

Гореспоменатите заявки върнаха резултатния набор чрез групиране на редовете с помощта на клаузата GROUP BY. Сега ще групираме редовете с агрегатната функция, както е показано по-долу.

# GROUP BY - Вземете максималната възраст на всички потребители с конкретно собствено име
ИЗБЕРЕТЕ първо_име, MAX(възраст) КАТО max_age от потребител GROUP BY first_name;

# Резултат
Джон 18
Рик 19
Харш 20
Tajwinder 18

# GROUP BY - Вземете средната възраст на всички потребители с конкретно собствено име
ИЗБЕРЕТЕ име , AVG(age) AS avg_age от потребител GROUP BY first_name;

# Резултат
Джон 17.0000
Рик 19.0000
Harsh 20.0000
Tajwinder 18.0000>

Ето как можем да използваме клаузата 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. LOAD DATA INFILE лесно конвертирате ГГГГММДД в ​​ГГГГ-ММ-ДД?

  2. Как да избирате от две таблици в MySQL, дори ако не всички редове в едната таблица имат кореспонденти в другата?

  3. Как да поправя таблица на InnoDB?

  4. Поточно предаване на големи набори от резултати с MySQL

  5. Симулирайте функцията на забавяне в MySQL