Kodokon kodokon.com

Агрегация: COUNT, SUM, AVG, MIN/MAX и GROUP BY

Считай суммы, средние значения и статистику по группам с помощью агрегатных функций и GROUP BY.

8 мин · 3 вопросов

Открыть этот урок в Kodokon

Агрегатная функция принимает на вход несколько строк и возвращает одно значение: сумму, среднее, минимум... Самая простая - COUNT(*), которая считает строки. Она естественно сочетается с WHERE: база данных сначала фильтрует, а потом считает.

SQL
SELECT COUNT(*) FROM books;

SELECT COUNT(*) FROM books WHERE genre = 'sf';
Всего 7 книг, из них 4 - научная фантастика

Остальные важные агрегаты применяются к столбцу: SUM(price) складывает, AVG(price) считает среднее, MIN(year) и MAX(year) находят наименьшее и наибольшее значения. Ключевое слово AS задаёт псевдоним, то есть понятное имя для вычисленного столбца.

SQL
SELECT SUM(price) AS total FROM books;

SELECT AVG(price) AS avg_sf
FROM books
WHERE genre = 'sf';

SELECT MIN(year), MAX(year) FROM books;
Сумма: 52.4; среднее по sf: 8.375; 1888 и 1965

А как получить статистику по каждой категории? Для этого нужен GROUP BY: база данных группирует строки с одинаковым значением (здесь - жанром), а затем применяет агрегат к каждой группе. В результате получается по одной строке на группу.

SQL
SELECT genre, COUNT(*) AS nb
FROM books
GROUP BY genre;

SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;
sf: 4 книги; aventure: 2; conte: 1

Проверка знаний

Убедись, что запомнил ключевые моменты этого урока.

  1. Что возвращает SELECT COUNT(*) FROM books;?
    • Количество столбцов в таблице
    • Количество строк в таблице
    • Список всех книг
  2. Какая функция вычисляет среднюю цену книг?
    • SUM(price)
    • AVG(price)
    • MEAN(price)
    • MAX(price)
  3. Что даёт SELECT genre, COUNT(*) FROM books GROUP BY genre;?
    • По одной строке на книгу, с её жанром
    • Одну строку с общим количеством книг
    • По одной строке на жанр, с количеством книг этого жанра