Специальные атрибуты COUNT, GROUP BY
Введение
При работе с базами данных часто требуется не просто получить отдельные записи, а проанализировать данные в целом: посчитать количество записей, определить среднее значение, сгруппировать данные по определённому признаку.
Для решения таких задач в языке SQL используются агрегатные функции и оператор GROUP BY.
Агрегатные функции в SQL
Агрегатные функции — это специальные функции SQL, которые выполняют вычисления над набором строк и возвращают одно итоговое значение.
Наиболее часто используемые агрегатные функции:
COUNT()— количество записей;SUM()— сумма значений;AVG()— среднее значение;MIN()— минимальное значение;MAX()— максимальное значение.
В рамках данной лекции основной акцент делается на функцию COUNT.
Функция COUNT
1. Назначение COUNT
Функция COUNT используется для подсчёта количества строк в таблице или в результате запроса.
COUNT часто применяется:
- для подсчёта количества записей;
- для формирования отчётов;
- для анализа наполненности таблиц;
- совместно с оператором
GROUP BY.
2. Основные варианты COUNT
COUNT(*)
Подсчитывает все строки, включая строки с пустыми значениями.
SELECT COUNT(*) FROM Students;
COUNT(столбец)
Подсчитывает строки, где значение указанного столбца не равно NULL.
SELECT COUNT(email) FROM Students;
3. COUNT с условием WHERE
Функция COUNT может использоваться совместно с условием отбора.
SELECT COUNT(*)
FROM Students
WHERE group_id = 101;
В этом случае будет подсчитано количество записей, удовлетворяющих условию.
Оператор GROUP BY
1. Назначение GROUP BY
Оператор GROUP BY используется для группировки строк по одному или нескольким столбцам.
После группировки агрегатные функции применяются к каждой группе отдельно.
GROUP BY позволяет получать ответы на вопросы вида:
- сколько студентов в каждой группе;
- сколько товаров в каждой категории;
- сколько заказов у каждого клиента.
2. Общий синтаксис GROUP BY
SELECT столбец, агрегатная_функция(столбец)
FROM таблица
GROUP BY столбец;
3. Пример использования GROUP BY
Подсчитать количество студентов в каждой группе:
SELECT group_id, COUNT(*)
FROM Students
GROUP BY group_id;
Результатом будет таблица, где каждой группе соответствует количество студентов.
Совместное использование COUNT и GROUP BY
COUNT чаще всего применяется вместе с GROUP BY для получения сгруппированной статистики.
Пример
SELECT group_id, COUNT(*) AS student_count
FROM Students
GROUP BY group_id;
Здесь:
group_id— признак группировки;COUNT(*)— количество записей в каждой группе;student_count— псевдоним результирующего столбца.
Несколько столбцов в GROUP BY
GROUP BY может использоваться сразу с несколькими столбцами.
SELECT group_id, course, COUNT(*)
FROM Students
GROUP BY group_id, course;
В этом случае данные группируются по комбинации значений столбцов.
Ограничения и правила GROUP BY
При использовании GROUP BY необходимо соблюдать следующие правила:
- Все столбцы в SELECT, которые не являются агрегатными, должны присутствовать в GROUP BY.
- Нельзя использовать обычные столбцы без группировки.
- Агрегатные функции применяются после группировки.
Пример ошибки:
SELECT full_name, COUNT(*)
FROM Students
GROUP BY group_id;
Поле full_name не входит в GROUP BY — такой запрос некорректен.
GROUP BY и WHERE
Условие WHERE применяется до группировки.
SELECT group_id, COUNT(*)
FROM Students
WHERE course = 2
GROUP BY group_id;
В этом примере сначала отбираются студенты второго курса, а затем выполняется группировка.
Типичные ошибки
- Использование столбцов в SELECT без GROUP BY.
- Попытка использовать агрегатные функции в WHERE.
- Непонимание разницы между COUNT(*) и COUNT(столбец).
Итоги
- COUNT — агрегатная функция для подсчёта количества строк.
- GROUP BY — оператор группировки данных.
- COUNT и GROUP BY чаще всего используются совместно.
- WHERE применяется до GROUP BY и влияет на набор данных.
- Эти конструкции лежат в основе аналитических SQL-запросов.