Поиск…


Синтаксис

  1. SELECT expression1, expression2, ... expression_n,
  2. aggregate_function (выражение)
  3. ОТ таблиц
  4. [ГДЕ условия]
  5. GROUP BY expression1, expression2, ... expression_n;

параметры

параметр ПОДРОБНОСТИ
expression1, expression2, ... expression_n Выражения, которые не заключены в агрегированную функцию и должны быть включены в предложение GROUP BY.
aggregate_function Функция, такая как функции SUM, COUNT, MIN, MAX или AVG.
таблицы он таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в предложении FROM.
ГДЕ условия Необязательный. Условия, которые должны быть выполнены для выбранных записей.

замечания

Предложение MySQL GROUP BY используется в инструкции SELECT для сбора данных по нескольким записям и группировки результатов по одному или нескольким столбцам.

Его поведение частично определяется значением переменной ONLY_FULL_GROUP_BY . Когда это разрешено, SELECT которые группируются по любому столбцу, не входящему в выход, возвращают ошибку. ( Это значение по умолчанию равно 5.7.5 .) Как установка, так и не настройка этой переменной могут вызвать проблемы для наивных пользователей или пользователей, привыкших к другим СУБД.

ГРУППА С ИСПОЛЬЗОВАНИЕМ СУММЫ Функция

SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;

Группа с помощью функции MIN

Предположим, что таблица сотрудников, в которой каждая строка является сотрудником, который имеет name , department и salary .

SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;

Это сообщит вам, какой отдел содержит сотрудника с самой низкой зарплатой и какую зарплату. Поиск name сотрудника с наименьшей зарплатой в каждом отделе - это другая проблема, выходящая за рамки этого примера. См. «Максимальный размер группы».

ГРУППА ПО ИСПОЛЬЗОВАНИЮ COUNT Функция

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;

ГРУППА ПО ИСПОЛЬЗОВАНИЮ

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;

Использование GROUP BY ... HAVING для фильтрации агрегатных записей аналогично использованию SELECT ... WHERE для фильтрации отдельных записей.

Вы также можете сказать, что HAVING Man_Power >= 10 так как HAVING понимает «псевдонимы».

Группа с помощью Group Concat

Группа Concat используется в MySQL для получения конкатенированных значений выражений с более чем одним результатом для каждого столбца. Значит, есть много строк, которые нужно выбрать для одного столбца, например Name(1):Score(*)

название Гол
Адам A +
Адам A-
Адам В
Адам C +
Билл D-
Джон A-
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM   Grade
GROUP BY Name

Результаты:

+------+------------+ 
| Name | Grades     | 
+------+------------+ 
| Adam | C+ B A- A+ | 
| Bill | D-         | 
| John | A-         | 
+------+------------+ 

GROUP BY с функциями AGGREGATE

Таблица ЗАКАЗОВ

+---------+------------+----------+-------+--------+
| orderid | customerid | customer | total | items  |
+---------+------------+----------+-------+--------+
|       1 |          1 | Bob      |  1300 |     10 |
|       2 |          3 | Fred     |   500 |      2 |
|       3 |          5 | Tess     |  2500 |      8 |
|       4 |          1 | Bob      |   300 |      6 |
|       5 |          2 | Carly    |   800 |      3 |
|       6 |          2 | Carly    |  1000 |     12 |
|       7 |          3 | Fred     |   100 |      1 |
|       8 |          5 | Tess     | 11500 |     50 |
|       9 |          4 | Jenny    |   200 |      2 |
|      10 |          1 | Bob      |   500 |     15 |
+---------+------------+----------+-------+--------+
  • COUNT

Возвратите количество строк , удовлетворяющих определенным критериям в WHERE .

Например: количество заказов для каждого клиента.

SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer

Результат:

+----------+--------+
| customer | orders |
+----------+--------+
| Bob      |      3 |
| Carly    |      2 |
| Fred     |      2 |
| Jenny    |      1 |
| Tess     |      2 |
+----------+--------+
  • SUM

Возвращает сумму выбранного столбца.

Например: сумма общей суммы и предметов для каждого клиента.

SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer

Результат:

+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob      |      2100 |        31 |
| Carly    |      1800 |        15 |
| Fred     |       600 |         3 |
| Jenny    |       200 |         2 |
| Tess     |     14000 |        58 |
+----------+-----------+-----------+
  • AVG

Возвращает среднее значение столбца числового значения.

Например: средняя стоимость заказа для каждого клиента.

SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer

Результат:

+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob      |       700 |
| Carly    |       900 |
| Fred     |       300 |
| Jenny    |       200 |
| Tess     |      7000 |
+----------+-----------+
  • МАКСИМУМ

Вернуть максимальное значение определенного столбца или выражения.

Например: максимальный заказ для каждого клиента.

SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer

Результат:

+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob      |      1300 |
| Carly    |      1000 |
| Fred     |       500 |
| Jenny    |       200 |
| Tess     |     11500 |
+----------+-----------+
  • MIN

Возврат наименьшего значения определенного столбца или выражения.

Например: минимальный заказ для каждого клиента.

SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer

Результат:

+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob      |       300 |
| Carly    |       800 |
| Fred     |       100 |
| Jenny    |       200 |
| Tess     |      2500 |
+----------+-----------+


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow