GROUP BY
GROUP BY делит строки на группы и считает агрегат для каждой группы. Без него агрегатная функция даёт один итог на всю таблицу. Здесь работаем с tutorial.aapl_historical_stock_price и tutorial.crunchbase_companies.
Итоги по группам
Заголовок раздела «Итоги по группам»Сколько акций торговали в каждом году:
SELECT year, SUM(volume) AS volume_sumFROM tutorial.aapl_historical_stock_priceGROUP BY yearORDER BY year;Запрос вернёт по одной строке на каждый год.
Несколько столбцов в группе
Заголовок раздела «Несколько столбцов в группе»Можно группировать по нескольким столбцам. Группа — это каждая уникальная пара значений:
SELECT year, month, COUNT(*) AS trading_daysFROM tutorial.aapl_historical_stock_priceGROUP BY year, monthORDER BY year, month;Вместо имён столбцов можно писать номера из SELECT:
SELECT year, month, COUNT(*) AS trading_daysFROM tutorial.aapl_historical_stock_priceGROUP BY 1, 2ORDER BY 1, 2;Главное правило
Заголовок раздела «Главное правило»Каждый столбец в SELECT должен быть либо в GROUP BY, либо внутри агрегатной функции.
-- ошибка: month не в GROUP BY и не в агрегатеSELECT year, month, SUM(volume) AS volume_sumFROM tutorial.aapl_historical_stock_priceGROUP BY year;Порядок частей запроса
Заголовок раздела «Порядок частей запроса»SELECT → FROM → WHERE → GROUP BY → ORDER BY. WHERE фильтрует строки до группировки.
SELECT status, COUNT(*) AS companiesFROM tutorial.crunchbase_companiesWHERE country_code = 'USA'GROUP BY statusORDER BY companies DESC;Практика
Заголовок раздела «Практика»Решайте сами, без AI. Сначала напишите запрос, потом сверьтесь с проверкой, и только потом открывайте решение.
Задание 1
Заголовок раздела «Задание 1»Посчитайте, сколько всего акций торговали каждый месяц. Отсортируйте результат по времени.
Проверка: 180 строк. Первая строка: 2000, 1, 112099800.
Решение
SELECT year, month, SUM(volume) AS volume_sumFROM tutorial.aapl_historical_stock_priceGROUP BY year, monthORDER BY year, month;Задание 2
Заголовок раздела «Задание 2»Напишите запрос, который посчитает среднее дневное изменение цены акции Apple (close - open) по годам.
Проверка: 15 строк. В 2000 году среднее изменение около -0.115.
Решение
SELECT year, AVG(close - open) AS avg_daily_changeFROM tutorial.aapl_historical_stock_priceGROUP BY 1ORDER BY 1;Задание 3
Заголовок раздела «Задание 3»Напишите запрос, который найдёт самую низкую и самую высокую цену акции Apple за каждый месяц.
Проверка: 180 строк. Первая строка: 2000, 1, 86.5, 121.5.
Решение
SELECT year, month, MIN(low) AS lowest_price, MAX(high) AS highest_priceFROM tutorial.aapl_historical_stock_priceGROUP BY 1, 2ORDER BY 1, 2;Задание 4
Заголовок раздела «Задание 4»Посчитайте компании в tutorial.crunchbase_companies по статусам (status). Сначала самый частый статус.
Проверка: 4 строки. Первая: operating, 53034.
Решение
SELECT status, COUNT(*) AS companiesFROM tutorial.crunchbase_companiesGROUP BY statusORDER BY companies DESC;