avatar
Мир аналитика данных
@analysts_world
13.09.2022 18:36
HAVING Это Present Continuous в английском, но речь тут не об этом. ??
Это команда в SQL, которая фильтрует результат группировки. Разберем на рабочем примере.

Казалось бы, у нас же есть уже условие WHERE, куда мы вписываем условия.
Но если нам нужно вывести клиентов с месячным оборотом больше одного миллиона, то WHERE нам тут не поможет. А вот HAVING спасет ситуацию.

Найдем суммы выручки за месяц по каждому клиенту, а потом HAVING отберет тех, у кого сумма avg_amount получилась больше миллиона

select p.ACCOUNT_ID,
sum(case when p.currency in ('RUB','RUR') then p.amount else (p.amount * cr.rate) end)/(MONTH(CURRENT_DATE) - 1) as avg_amount,
from sales.payment p -- вытаскиваем из базы платежей
left join sales.currency c - - присоединяем базу с валютами
on p.currency = c.code - - по совпадающему ключу
left join sales.currency_rate cr - - присоединяем базу с курсами валют
o
n c.id = cr.currency_id - - по совпадающему ключу
where p.created_at <= CURRENT_DATE group by 1 - - группировка по номеру клиента
having avg_amount > 1000000


Тут, кстати, видно как работает оператор case ?? когда нужно посчитать выручку в рублях
? 12
? 2
? 1
3 1.7K

Обсуждение 0

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram