2016-10-12 3 views
1

Предположим, у меня есть таблица с заказами с столбцами доходов и состояния. Я хочу группировать заказы по группе доходов (сгруппированы с шагом в 10) и получить процент от того, что их столбец статуса установлен равным 1 в соответствующей группе доходов. Я думал, что функция окна была путь, но где оператор ограничивает столбцы, так что я в конечном итоге только с колоннами, где статус == 1. Конечный результат будет выглядеть примерно так: 10 | 76%, 20 | 50% и т.д.Вычисление процента GROUP_BY с оператором WHERE

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 

ответ

0

оговорка PARTITION BY является чрезмерным в вашем случае, каждый раздел был создан с помощью дизъюнкции GROUP BY

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(*) * 1.0/SUM(COUNT(*)) OVER() as percentage 
from "order" 
where "order".status = 1 
group by revgroup 
Смежные вопросы