Файлы к уроку:
В этом уроке мы будем работать с таблицами bike_sales и religion, созданными в предыдущих уроках.
Счет количества строк
select count(*)
from religion
Посчитать количество значений в столбце
Посчитаем сколько в столбце не NULL значений.
select count(metro_line)
from religion
Уникальные значения в столбце
Посчитать количество уникальных значений столбца.
-- Количество уникальных станий метро
select count(distinct metro_station)
from religion
-- Количество уникальных линий метро
select count(distinct metro_line)
from religion
Максимальное и минимальное значение в столбце
Вычислим максимальный и минимальный profit в таблице bikes_sales.
select
max(profit) as max_profit,
min(profit) as min_profit
from bike_sales
Группировка и агрегирование с помощью GROUP BY
С помощью GROUP BY можно сгруппировать результаты по одному или нескольким столбцам. Это позволяет нам выполнять операции SUM(), COUNT() и другие. Например, можно найти сумму продаж по странам. GROUP BY оставляет только уникальные значения как DISTINCT. Выполним GROUP BY без агрегирования.
-- Вернутся уникальные значения customer_country
select
customer_country
from bikes.bike_sales
group by customer_country
order by customer_country
Операция группировки не ограничена одним столбцом. Группировать можно по нескольким полям.
-- Уникальные пары customer_country-customer_state
select
customer_country,
customer_state
from bikes.bike_sales
group by
customer_country,
customer_state
order by
customer_country,
customer_state
Совмещаем GROUP BY и COUNT
-- Посчитать количество храмов на каждой ветке метро
-- Выполняем сортировку по убыванию количества храмов
select
metro_line,
count(*)
from religion
group by metro_line
order by count(*) desc
Группировку можно выполнять по нескольким полям. Например, мы можем посчитать количество храмов на каждой станции каждой ветки метро.
-- Посчитать количество храмов на каждой станции каждой ветки
-- Сортировка по веткам, а внутри по станциям по алфавиту
select
metro_line,
metro_station,
count(*)
from religion
group by
metro_line,
metro_station
order by
metro_line,
metro_station
Совмещаем GROUP BY и COUNT
Посчитаем сумму выручки и прибыли по каждой стране.
-- Сумма выручки и прибыли по каждой стране
select
customer_country,
sum(revenue) as revenue,
sum(profit) as profit
from bikes.bike_sales
group by
customer_country
order by
profit desc
-- Сумма выручки и прибыли по каждой стране и штату
select
customer_country,
customer_state,
sum(revenue) as revenue,
sum(profit) as profit
from bikes.bike_sales
group by
customer_country,
customer_state
order by
profit desc
Фильтрация запроса с помощью HAVING
HAVING позволяет отфильтровать результат группировки.
-- Сумма выручки, расходов, прибыли по категории и подкатегории
-- Год = 2015
-- Оставить только строки с прибылью >= 100'000
select
product_category,
product_subcategory,
sum(revenue) as revenue,
sum(cost) as cost,
sum(profit) as profit
from bikes.bike_sales
where order_year = 2015
group by
product_category,
product_subcategory
having sum(profit) >= 100000
order by profit desc