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 мы разобрали.
-
- Михаил Русаков
Комментарии (6):
У вас пропущена запятая в строке: "Допустим у нас есть таблица с пользователями:" Хорошие статьи. Пишите по SQL по-больше! Там много всяких встроенных функций, про которые не плохо бы рассказать
Ответить
Спасибо, исправлено!
Ответить
И перед намИ
Ответить
Спасибо, исправил.
Ответить
Михаил, а что это за хеш пользователей? Можно чуточку поподробнее, а то не совсем понятна природа происхождения этого хеша? :)
Ответить
Обыкновенный хеш, сгенерированный специально для этого пользователя.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.