MySQL
Группа по
Поиск…
Синтаксис
- SELECT expression1, expression2, ... expression_n,
- aggregate_function (выражение)
- ОТ таблиц
- [ГДЕ условия]
- 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 |
+----------+-----------+