Перейти к содержимому
TelegramGitHub

GROUP BY

GROUP BY делит строки на группы и считает агрегат для каждой группы. Без него агрегатная функция даёт один итог на всю таблицу. Здесь работаем с tutorial.aapl_historical_stock_price и tutorial.crunchbase_companies.

Сколько акций торговали в каждом году:

SELECT year,
SUM(volume) AS volume_sum
FROM tutorial.aapl_historical_stock_price
GROUP BY year
ORDER BY year;

Запрос вернёт по одной строке на каждый год.

Можно группировать по нескольким столбцам. Группа — это каждая уникальная пара значений:

SELECT year,
month,
COUNT(*) AS trading_days
FROM tutorial.aapl_historical_stock_price
GROUP BY year, month
ORDER BY year, month;

Вместо имён столбцов можно писать номера из SELECT:

SELECT year,
month,
COUNT(*) AS trading_days
FROM tutorial.aapl_historical_stock_price
GROUP BY 1, 2
ORDER BY 1, 2;

Каждый столбец в SELECT должен быть либо в GROUP BY, либо внутри агрегатной функции.

-- ошибка: month не в GROUP BY и не в агрегате
SELECT year,
month,
SUM(volume) AS volume_sum
FROM tutorial.aapl_historical_stock_price
GROUP BY year;

SELECT → FROM → WHERE → GROUP BY → ORDER BY. WHERE фильтрует строки до группировки.

SELECT status,
COUNT(*) AS companies
FROM tutorial.crunchbase_companies
WHERE country_code = 'USA'
GROUP BY status
ORDER BY companies DESC;

Решайте сами, без AI. Сначала напишите запрос, потом сверьтесь с проверкой, и только потом открывайте решение.

Посчитайте, сколько всего акций торговали каждый месяц. Отсортируйте результат по времени.

Проверка: 180 строк. Первая строка: 2000, 1, 112099800.

Решение
SELECT year,
month,
SUM(volume) AS volume_sum
FROM tutorial.aapl_historical_stock_price
GROUP BY year, month
ORDER BY year, month;

Напишите запрос, который посчитает среднее дневное изменение цены акции Apple (close - open) по годам.

Проверка: 15 строк. В 2000 году среднее изменение около -0.115.

Решение
SELECT year,
AVG(close - open) AS avg_daily_change
FROM tutorial.aapl_historical_stock_price
GROUP BY 1
ORDER BY 1;

Напишите запрос, который найдёт самую низкую и самую высокую цену акции Apple за каждый месяц.

Проверка: 180 строк. Первая строка: 2000, 1, 86.5, 121.5.

Решение
SELECT year,
month,
MIN(low) AS lowest_price,
MAX(high) AS highest_price
FROM tutorial.aapl_historical_stock_price
GROUP BY 1, 2
ORDER BY 1, 2;

Посчитайте компании в tutorial.crunchbase_companies по статусам (status). Сначала самый частый статус.

Проверка: 4 строки. Первая: operating, 53034.

Решение
SELECT status,
COUNT(*) AS companies
FROM tutorial.crunchbase_companies
GROUP BY status
ORDER BY companies DESC;