Оператор group by в sql: Группировка данных, оператор group by, оператор having
SQL GROUP BY — группировка в запросах
Оператор SQL GROUP BY служит для распределения строк — результата запроса — по группам, в которых
значения некоторого столбца, по которому происходит группировка, являются одинаковыми. Группировку можно
производить как по одному столбцу, так и по нескольким.
Часто оператор SQL GROUP BY применяется вместе с агрегатными функциями (COUNT, SUM, AVG, MAX, MIN).
В этих случаях агрегатные функции служат для вычисления соответствующего агрегатного значения ко всему
набору строк, для которых некоторый столбец — общий.
Оператор GROUP BY имеет следующий синтаксис:
SELECT ИМЕНА_СТОЛБЦОВ
FROM ИМЯ_ТАБЛИЦЫ
[WHERE УСЛОВИЕ]
GROUP BY ИМЕНА_СТОЛБЦОВ
Если в результате запроса требуется вывести один столбец и по этому же столбцу производится группировка,
то оператор GROUP BY просто выбирает уникальные значения и убирает дубликаты, то есть выполняет те же задачи, что и ключевое слово DISTINCT.
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД
не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.
Скрипт для создания базы данных библиотеки, её таблиц и заполения таблиц данными —
в файле по этой ссылке.
В примерах работаем с базой данных библиотеки и ее таблицей «Книга в пользовании» (Bookinuse). Отметим, что
оператор GROUP BY ведёт себя несколько по-разному в MySQL и в MS SQL Server. Эти различия будут показаны на
примерах.
Author | Title | Pubyear | Inv_No | Customer_ID |
Толстой | Война и мир | 2005 | 28 | 65 |
Чехов | Вишневый сад | 2000 | 17 | 31 |
Чехов | Избранные рассказы | 2011 | 19 | 120 |
Чехов | Вишневый сад | 1991 | 5 | 65 |
Ильф и Петров | Двенадцать стульев | 1985 | 3 | 31 |
Маяковский | Поэмы | 1983 | 2 | 120 |
Пастернак | Доктор Живаго | 2006 | 69 | 120 |
Толстой | Воскресенье | 2006 | 77 | 47 |
Толстой | Анна Каренина | 1989 | 7 | 205 |
Пушкин | Капитанская дочка | 2004 | 25 | 47 |
Гоголь | Пьесы | 2007 | 81 | 47 |
Чехов | Избранные рассказы | 1987 | 4 | 205 |
Пушкин | Сочинения, т.1 | 1984 | 6 | 47 |
Пастернак | Избранное | 2000 | 137 | 18 |
Пушкин | Сочинения, т.2 | 1984 | 8 | 205 |
NULL | Наука и жизнь 9 2018 | 2019 | 127 | 18 |
Чехов | Ранние рассказы | 2001 | 171 | 31 |
Пример 1. Вывести авторов выданных книг, сгруппировав их. Пишем
следующий запрос:
SELECT Author
FROM BOOKINUSE
GROUP BY Author
Этот запрос вернёт следующий результат:
Author |
NULL |
Гоголь |
Ильф и Петров |
Маяковский |
Пастернак |
Пушкин |
Толстой |
Чехов |
Как видим, в таблице стало меньше строк, так как фамилии
авторов остались каждая по одной.
В следующем примере увидим, что оператор GROUP BY не следует путать
с оператором ORDER BY и поймём, чем эти операторы отличаются друг от друга.
Пример 2. Вывести авторов и названия выданных книг,
сгруппировав по авторам. Пишем
следующий запрос, который допустим в MySQL:
SELECT Author, Title
FROM Bookinuse
GROUP BY Author
Этот запрос вернёт следующий результат:
Author | Title |
NULL | Наука и жизнь 9 2018 |
Гоголь | Пьесы |
Ильф и Петров | Двенадцать стульев |
Маяковский | Поэмы |
Пастернак | Доктор Живаго |
Пушкин | Капитанская дочка |
Толстой | Война и мир |
Чехов | Вишнёвый сад |
Как видим, в таблице каждому автору соответствует лишь одна книга, причём та,
которая в таблице BOOKINUSE является первой по порядку записей.
Если бы нам требовалось вывести все книги, причём авторы должны были бы следовать
не «вразброс», а по порядку: сначала Гоголь и все его книги, затем другие авторы и все их книги,
то мы применили бы не оператор GROUP BY, а оператор ORDER BY.
По-другому ведёт себя оператор GROUP BY в MS SQL Server.
И всё же вывести все записи, соответствующие значению столбца, по которому происходит
группировка, можно. Но в этом случае в результирующей таблице должен появиться ещё один столбец. Такой
случай проиллюстирован в следующем примере.
Пример 3. Вывести авторов, названия выданных книг, ID пользователя и
инвентарный номер выданной книги.
Сгруппировать по авторам, ID пользователя и инвентарному номеру. На MySQL запрос будет следующим:
SELECT Author, Title, Customer_ID, Inv_no
FROM Bookinuse
GROUP BY Author, Customer_ID, Inv_no
Этот запрос вернёт следующий результат:
Author | Title | Customer_ID | Inv_no |
Гоголь | Пьесы | 47 | 81 |
Ильф и Петров | Двенадцать стульев | 31 | 3 |
Маяковский | Поэмы | 120 | 2 |
Пастернак | Избранное | 18 | 137 |
Пастернак | Доктор Живаго | 120 | 69 |
Пушкин | Капитанская дочка | 47 | 25 |
Пушкин | Сочинения, т.1 | 47 | 6 |
Пушкин | Сочинения, т.2 | 205 | 8 |
Толстой | Воскресенье | 47 | 77 |
Толстой | Война и мир | 65 | 28 |
Толстой | Анна Каренина | 205 | 7 |
Чехов | Вишневый сад | 31 | 19 |
Чехов | Ранние рассказы | 31 | 171 |
Чехов | Вишневый сад | 65 | 5 |
Чехов | Избранные рассказы | 120 | 19 |
Чехов | Избранные рассказы | 205 | 4 |
Как видим, в результирующей таблице присутствуют все книги всех авторов, причём авторы
следуют по порядку, как если бы мы применили оператор ORDER BY. Кроме того, видно, что записи сгруппированы
и по второму указанному столбцу — Customer_ID. Так, у автора Пушкина сначала перечисляются книги, выданные
пользователю с Customer_ID 47, а затем — 205. У автора Чехова сначала перечисляются книги, выданные
пользователю с Customer_ID 31, а затем — с другими номерами. Третий столбец, по которому происходит группировка — Inv_no —
добавлен только для того, чтобы в результирующей таблице выводились все строки, соответствующие значениям
ранее перечисленных столбцов для группировки, а не только уникальные.
По-другому ведёт себя
оператор GROUP BY в MS SQL Server
и в случае этого запроса.
Агрегатные функции COUNT, SUM, AVG, MAX, MIN служат для вычисления соответствующего агрегатного значения ко всему
набору строк, для которых некоторый столбец — общий.
Пример 4. Вывести количество выданных книг каждого автора. Запрос будет следующим:
SELECT Author, COUNT(*) AS InUse
FROM Bookinuse
GROUP BY Author
Результатом выполнения запроса будет следующая таблица:
Author | InUse |
NULL | 1 |
Гоголь | 1 |
Ильф и Петров | 1 |
Маяковский | 1 |
Пастернак | 2 |
Пушкин | 3 |
Толстой | 3 |
Чехов | 5 |
Пример 5. Вывести количество книг, выданных каждому пользователю. Запрос будет следующим:
SELECT Customer_ID, COUNT(*) AS InUse
FROM Bookinuse
GROUP BY Customer_ID
Результатом выполнения запроса будет следующая таблица:
User_ID | InUse |
18 | 1 |
31 | 3 |
47 | 4 |
65 | 2 |
120 | 3 |
205 | 3 |
Примеры запросов к базе данных «Библиотека» есть также в уроках по оператору IN,
предикату EXISTS и функциям
CONCAT, COALESCE.
На сайте есть более подробный материал об агрегатных функциях и их совместном
использовании с оператором GROUP BY.
Поделиться с друзьями
Реляционные базы данных и язык SQL
GROUP BY оператор — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
Этот SQL руководство объясняет, как использовать SQL GROUP BY с синтаксисом и примерами.
Описание
SQL оператор GROUP BY можно использовать в SELECT для сбора данных по нескольким записям и группировки результатов одного или нескольких столбцов.
Синтаксис
SELECT expression1, expression2, … expression_n,
aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n;
Параметры или аргументы
expression1, expression2, … expression_n — выражения, которые не входят в aggregate_function и должны быть включены в предложение GROUP BY в конце оператора SQL.
aggregate_function — это функция, такая как SUM, COUNT, функции MIN, MAX или AVG.
aggregate_expression – это столбец или выражение, которое используется в aggregate_function.
tables – таблицы из которых вы хотите выгрузить данные. После оператора FROM должна быть указана хотя бы одна таблица.
WHERE conditions. Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.
Пример – использования функции SUM
Давайте посмотрим на примере SQL запроса GROUP BY, который использует SQL функцию SUM.
В этом примере GROUP BY использует функцию SUM, чтобы получить total sales (общий объем продаж) по department (наименование отдела) таблицы order_details.
SELECT department, SUM(sales) AS «Total sales»
FROM order_details
GROUP BY department;
SELECT department, SUM(sales) AS «Total sales» FROM order_details GROUP BY department; |
В SQL SELECT предложении мы перечислили один столбец department, не входящий в функции SUM. Поле department должно быть указано в операторе GROUP BY.
Пример – использование функции COUNT
Давайте посмотрим, как можно использовать предложение GROUP BY с SQL функцией COUNT.
В этом примере GROUP BY использует функцию COUNT для возврата department (наименование отдела) и number of employees (количество сотрудников в отделе), которые делают более $ 5000 / год.
SELECT department, COUNT(*) AS «Number of employees»
FROM employees
WHERE salary > 25000
GROUP BY department;
SELECT department, COUNT(*) AS «Number of employees» FROM employees WHERE salary > 25000 GROUP BY department; |
Пример – использование функции MIN
Давайте рассмотрим следующий пример, как мы могли бы использовать GROUP BY с SQL функцией MIN.
Этот пример GROUP BY использует функцию MIN, для возврата department (наименование отдела) и минимальную salary (зарплату) в department.
SELECT department, MIN(salary) AS «Lowest salary»
FROM employees
GROUP BY department;
SELECT department, MIN(salary) AS «Lowest salary» FROM employees GROUP BY department; |
Пример — использование функции MAX
И, наконец, давайте посмотрим на то, как мы могли бы использовать GROUP BY с SQL функцией MAX.
В этом примере GROUP BY использует функцию MAX, чтобы вернуть department (наименование отдела) и максимальную salary (зарплату) в department.
SELECT department, MAX(salary) AS «Highest salary»
FROM employees
GROUP BY department;
SELECT department, MAX(salary) AS «Highest salary» FROM employees GROUP BY department; |
GROUP BY в SQL
Вы здесь:
Главная — MySQL — SQL — GROUP BY в SQL
Одной из важных команд в SQL является GROUP BY. Данная конструкция создана для выборки отдельных групп строк из таблицы, к каждой из которых применяются функции, указанные в SELECT (например, COUNT(), MIN() и так далее). Давайте разберём GROUP BY в SQL на конкретных примерах.
Допустим, у нас есть таблица супермаркетов:
- id — уникальный идентификатор.
- shop_id — уникальный идентификатор супермаркета.
- price — цена на молоко.
Нам необходимо узнать среднюю цену на молоко у каждого супермаркета. Обратите внимание, что shop_id может повторяться (ведь есть сети супермакетов). Поэтому нам необходимо сделать группу по shop_id, и для каждой строки в этой группе вычислить среднюю цену.
Исходная таблица выглядит следующим образом:
id |
shop_id |
price |
1 | 1 | 40 |
2 | 2 | 36 |
3 | 1 | 35 |
4 | 3 | 38 |
5 | 4 | 39 |
6 | 3 | 38 |
7 | 3 | 35 |
Для решения нашей задачи мы используем GROUP BY:
SELECT `shop_id`, AVG(`price`) FROM `table` GROUP BY `shop_id`
В результате получится следующее:
shop_id |
AVG(`price`) |
1 | 37.5 |
2 | 36.0 |
3 | 37.0 |
4 | 39.0 |
Таким образом, мы узнали среднюю цену в конкретной сети супермаркетов (или в одиночном магазине).
Ещё одним очень частым применением GROUP BY в SQL является выборка уникальных записей из таблиц. В предыдущем примере Вы заметили, что в результирующей выборке нет повторяющихся shop_id, тогда как в исходной таблице они были.
Допустим, у нас есть таблица с пользователями:
- id — уникальный идентификатор.
- email — e-mail пользователя.
- hash — уникальный хэш пользователя.
И перед нами встала задача выбрать уникальных пользователей, причём именно уникальных людей, а не уникальных учётных записей. Ведь у одного человека может быть и 100 аккаунтов с разными e-mail и, разумеется, id. А hash — это некая строка, характеризующая его как уникального человека.
Таким образом, нам надо выбрать все записи с уникальным hash. Для этого опять же используется GROUP BY:
SELECT * FROM `table` GROUP BY `hash`
В результате, будут извлечены только уникальные hash, то есть 2 одинаковых hash в результирующей выборке Вы не увидите.
Вот таких два практических примера использования GROUP BY в SQL мы разобрали.
-
Создано 09.09.2013 12:31:55 -
Михаил Русаков
Предыдущая статья Следующая статья
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
<a href=»https://myrusakov.ru» target=»_blank»><img src=»https://myrusakov.ru/images/button.gif» alt=»Как создать свой сайт» /></a>Она выглядит вот так:
-
Текстовая ссылка:
<a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
[URL=»https://myrusakov.ru»]Как создать свой сайт[/URL]
MS SQL Server и T-SQL
Операторы GROUP BY и HAVING
Последнее обновление: 19.07.2017
Для группировки данных в T-SQL применяются операторы GROUP BY и HAVING, для использования которых применяется следующий формальный синтаксис:
SELECT столбцы FROM таблица [WHERE условие_фильтрации_строк] [GROUP BY столбцы_для_группировки] [HAVING условие_фильтрации_групп] [ORDER BY столбцы_для_сортировки]
GROUP BY
Оператор GROUP BY определяет, как строки будут группироваться.
Например, сгруппируем товары по производителю
SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products GROUP BY Manufacturer
Первый столбец в выражении SELECT — Manufacturer представляет название группы, а второй столбец — ModelsCount представляет результат функции Count,
которая вычисляет количество строк в группе.
Стоит учитывать, что любой столбец, который используется в выражении SELECT (не считая столбцов, которые хранят результат агрегатных функций),
должны быть указаны после оператора GROUP BY. Так, например, в случае выше столбец Manufacturer указан и в выражении SELECT, и в выражении
GROUP BY.
И если в выражении SELECT производится выборка по одному или нескольким столбцам и также используются агрегатные функции, то необходимо использовать
выражение GROUP BY. Так, следующий пример работать не будет, так как он не содержит выражение группировки:
SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products
Другой пример, добавим группировку по количеству товаров:
SELECT Manufacturer, ProductCount, COUNT(*) AS ModelsCount FROM Products GROUP BY Manufacturer, ProductCount
Оператор GROUP BY
может выполнять группировку по множеству столбцов.
Если столбец, по которому производится группировка, содержит значение NULL, то строки со значением NULL составят
отдельную группу.
Следует учитывать, что выражение GROUP BY
должно идти после выражения WHERE
, но до выражения
ORDER BY
:
SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products WHERE Price > 30000 GROUP BY Manufacturer ORDER BY ModelsCount DESC
Фильтрация групп. HAVING
Оператор HAVING определяет, какие группы будут включены в выходной результат, то есть выполняет фильтрацию групп.
Применение HAVING во многом аналогично применению WHERE. Только есть WHERE применяется к фильтрации строк, то HAVING используется для фильтрации групп.
Например, найдем все группы товаров по производителям, для которых определено более 1 модели:
SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products GROUP BY Manufacturer HAVING COUNT(*) > 1
При этом в одной команде мы можем использовать выражения WHERE и HAVING:
SELECT Manufacturer, COUNT(*) AS ModelsCount FROM Products WHERE Price * ProductCount > 80000 GROUP BY Manufacturer HAVING COUNT(*) > 1
То есть в данном случае сначала фильтруются строки: выбираются те товары, общая стоимость которых больше 80000. Затем выбранные товары
группируются по производителям. И далее фильтруются сами группы — выбираются те группы, которые содержат больше 1 модели.
Если при этом необходимо провести сортировку, то выражение ORDER BY идет после выражения HAVING:
SELECT Manufacturer, COUNT(*) AS Models, SUM(ProductCount) AS Units FROM Products WHERE Price * ProductCount > 80000 GROUP BY Manufacturer HAVING SUM(ProductCount) > 2 ORDER BY Units DESC
В данном случае группировка идет по производителям, и также выбирается количество моделей для каждого производителя (Models)
и общее количество всех товаров по всем этим моделям (Units). В конце группы сортируются по количеству товаров по убыванию.
GROUP BY SQL Server — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать оператор GROUP BY в SQL Server (Transact-SQL) с синтаксисом и примерами.
Описание
GROUP BY SQL Server (Transact-SQL) используется в операторе SELECT для сбора данных по нескольким записям и группировки результатов по одному или нескольким столбцам.
Синтаксис
Синтаксис GROUP BY в SQL Server (Transact-SQL):
SELECT expression1, expression2, … expression_n,
aggregate_function (expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n;
Параметры или аргументы
expression1, expression2, … expression_n — выражения, которые не заключены в агрегирующую функцию и должны быть включены в предложение GROUP BY.
aggregate_function — это может быть функция, такая как функции SUM, COUNT, MIN, MAX или AVG.
tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в предложении FROM.
WHERE conditions— необязательный. Условия, которые должны быть выполнены для выбранных записей.
Пример использования функции SUM
Рассмотрим пример запроса SQL Server GROUP BY, который использует функцию SUM.
Например:
SELECT product_name, SUM(quantity) AS «Total quantity»
FROM products
GROUP BY product_name;
SELECT product_name, SUM(quantity) AS «Total quantity» FROM products GROUP BY product_name; |
В этом примере SQL Server GROUP BY используется функция SUM для возврата product_name и общего количества (для product_name).
Поскольку вы указали один столбец (поле product_name) в операторе SELECT, который не инкапсулирован в функцию SUM, вы должны использовать предложение GROUP BY. Поэтому поле product_name должно быть указано в предложении GROUP BY.
Пример использования функции COUNT
Рассмотрим, как мы можем использовать предложение GROUP BY с функцией COUNT.
Например:
SELECT manager_id, COUNT(*) AS «Number of employees»
FROM employees
WHERE last_name = ‘Колесников’
GROUP BY manager_id;
SELECT manager_id, COUNT(*) AS «Number of employees» FROM employees WHERE last_name = ‘Колесников’ GROUP BY manager_id; |
В этом примере GROUP BY используется функция COUNT для возврата manager_id и количества employees (сотрудников), чье last_name — ‘Колесников’.
Пример использования функции MIN
Рассмотрим, как мы можем использовать предложение GROUP BY с функцией MIN.
Например:
SELECT product_type, MIN(quantity) AS «Lowest quantity»
FROM products
GROUP BY product_type;
SELECT product_type, MIN(quantity) AS «Lowest quantity» FROM products GROUP BY product_type; |
Этот пример GROUP BY использует функцию MIN для возврата product_type и минимального количества для этого product_type.
Пример использования функции MAX
Наконец, рассмотрим, как мы можем использовать GROUP BY с функцией MAX.
Например:
SELECT department, MAX(salary) AS «Highest salary»
FROM employees
GROUP BY department;
SELECT department, MAX(salary) AS «Highest salary» FROM employees GROUP BY department; |
В этом примере используется функция MAX для возврата имени каждого department (отдела) и максимальной salary (заработной платы) в department.
GROUP BY оператор MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать MySQL оператор GROUP BY с синтаксисом и примерами.
Описание
MySQL оператор GROUP BY используется в SELECT предложении для сбора данных по нескольким записям и группировки результатов по одному или нескольким столбцам.
Синтаксис
Синтаксис оператора GROUP BY в MySQL:
SELECT expression1, expression2, … expression_n,
aggregate_function (expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n;
Параметры или аргументы
expression1, expression2, … expression_n — выражения, которые не заключены в агрегированную функцию и должны быть включены в предложение GROUP BY.
aggregate_function — функция, такая как функции SUM, COUNT, MIN, MAX или AVG.
tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.
WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.
Пример использования функции SUM
Рассмотрим пример запроса MySQL GROUP BY, который использует функцию SUM.
В этом примере MySQL GROUP BY используется функция SUM, чтобы вернуть имя product и общее количество (для product).
SELECT product, SUM(quantity) AS «Total kol»
FROM order_details
GROUP BY product;
SELECT product, SUM(quantity) AS «Total kol» FROM order_details GROUP BY product; |
Запрос в примере вернет общее количество по полю quantity под алиасом «Total kol».
Поскольку вы указали один столбец (поле product) в операторе SELECT, который не инкапсулирован в функцию SUM, то вы должны использовать оператор GROUP BY. Поэтому поле product должно быть указано в операторе GROUP BY.
Пример использования функции COUNT
Рассмотрим, как мы можем использовать оператор GROUP BY с функцией COUNT в MySQL.
В этом примере GROUP BY используется функция COUNT для возврата product и количества заказов (для этого product), которые находятся в категории product.
SELECT product, COUNT(*) AS «Number of orders»
FROM order_details
WHERE category = ‘produce’
GROUP BY product;
SELECT product, COUNT(*) AS «Number of orders» FROM order_details WHERE category = ‘produce’ GROUP BY product; |
Пример использования функции MIN
Рассмотрим, как мы можем использовать оператор GROUP BY с функцией MIN в MySQL.
В этом примере GROUP BY используется функция MIN, чтобы вернуть department (имя каждого отдела) и lowest salary (минимальную зарплату в отделе).
SELECT department, MIN(salary) AS «Lowest salary»
FROM employees
GROUP BY department;
SELECT department, MIN(salary) AS «Lowest salary» FROM employees GROUP BY department; |
Пример использования функции MAX
Наконец, посмотрим, как мы можем использовать оператор GROUP BY с функцией MAX в MySQL.
В этом примере GROUP BY используется функция MAX для возврата имени каждого department и максимальной заработной платы в department.
SELECT department, MAX(salary) AS «Highest salary»
FROM employees
GROUP BY department;
SELECT department, MAX(salary) AS «Highest salary» FROM employees GROUP BY department; |
PostgreSQL оператор GROUP BY — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать PostgreSQL оператор GROUP BY с синтаксисом и примерами.
Описание
PostgreSQL оператор GROUP BY используется в операторе SELECT для сбора данных по нескольким записям и группировки результатов по одному или нескольким столбцам.
Синтаксис
Синтаксис для оператора GROUP BY в PostgreSQL:
SELECT expression1, expression2,… expression_n,
aggregate_function (expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2,… expression_n;
Параметры или аргументы
- expression1, expression2,… expression_n
- Выражения, которые не заключены в агрегатную функцию и должны быть включены в предложение GROUP BY.
- aggregate_function
- Это может быть агрегатная функция, например sum, count, min, max или avg.
- tables
- Таблицы, из которых вы хотите получить записи. В операторе FROM должна быть указана хотя бы одна таблица.
- WHERE conditions
- Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.
Пример — использование функции sum
Рассмотрим пример PostgreSQL запроса GROUP BY, в котором используется функция sum.
В этом PostgreSQL примере GROUP BY используется функция sum для возврата department (названия отдела) и «Salaries for department» (общей заработной платы для отдела).
SELECT department, sum(salary) AS «Salaries for department»
FROM employees
GROUP BY department;
SELECT department, sum(salary) AS «Salaries for department» FROM employees GROUP BY department; |
Поскольку в вашем операторе SELECT вы указали один столбец (поле department), который не инкапсулирован в функцию sum, вы должны использовать оператор GROUP BY. Поэтому поле department должно быть указано в операторе GROUP BY.
Пример — использование функции count
Рассмотрим, как мы могли бы использовать оператор GROUP BY с функцией count.
В этом примере GROUP BY функция count используется для возврата department (отдела) и «Number of employees» (количества сотрудников для этого отдела), которые имеют status ‘Active’.
SELECT department, count(*) AS «Number of employees»
FROM employees
WHERE status = ‘Active’
GROUP BY department;
SELECT department, count(*) AS «Number of employees» FROM employees WHERE status = ‘Active’ GROUP BY department; |
Пример — использование функции min
Давайте теперь посмотрим, как мы можем использовать оператор GROUP BY с функцией min.
В этом примере GROUP BY используется функция min для возврата department (названия отдела) и «Lowest salary» (минимальной зарплаты в отделе).
SELECT department, min(salary) AS «Lowest salary»
FROM employees
GROUP BY department;
SELECT department, min(salary) AS «Lowest salary» FROM employees GROUP BY department; |
Пример — использование функции max
Наконец, давайте посмотрим, как можно использовать оператор GROUP BY с функцией max.
В этом примере GROUP BY используется функция max для получения department (названия отдела) и «Highest salary» (максимальной зарплаты в отделе).
SELECT department, max(salary) AS «Highest salary»
FROM employees
GROUP BY department;
SELECT department, max(salary) AS «Highest salary» FROM employees GROUP BY department; |
mysql — Как правильно использовать оператор GROUP BY в SQL?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.Синтаксис
sql, количество, группировка и добавление в оператор
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироваться текущее сообщество
.Сервер
sql — Sub SELECT в операторе GROUP BY SQL
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
c # — EntityFramework Group, не включенная в оператор SQL
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.