Допустим, у меня есть таблица с заказами со столбцами дохода и статуса. Я хочу сгруппировать заказы по группе доходов (сгруппированных с шагом 10) и получить процент, для которого в столбце статуса установлено значение 1 в соответствующей группе доходов. Я думал, что подойдет оконная функция, но оператор where ограничивает столбцы, так что я получаю только столбцы, где статус == 1. Конечный результат будет выглядеть примерно так: 10 | 76%
, 20 | 50%
и т. д.
SELECT CASE
WHEN revenue between 1 and 10 then 10
WHEN revenue between 10 and 20 then 20
WHEN revenue between 20 and 30 then 30
WHEN revenue between 30 and 40 then 40
WHEN revenue between 40 and 50 then 50
else 60
END as revgroup,
COUNT(*) / CAST(SUM(count(*)) over (partition by CASE
WHEN revenue between 1 and 10 then 10
WHEN revenue between 10 and 20 then 20
WHEN revenue between 20 and 30 then 30
WHEN revenue between 30 and 40 then 40
WHEN revenue between 40 and 50 then 50
else 60 END) as float) as percentage
from "order"
where "order".status = 1
group by revgroup