我正在寻找答案,但似乎没有什么能比得上我的问题。因此,使用汇总查询:
select year, month, count (sale_id) from sales
group by rollup (year, month);
会给出如下结果:
YEAR MONTH TOTAL
2015 1 200
2015 2 415
2015 null 615
2016 1 444
2016 2 423
2016 null 867
null null 1482
而且我想按总计desc排序,但我希望年度总数最高(重要的是:所有记录与该年相比),然后是其他年份的其他记录。所以我希望它看起来像:
YEAR MONTH TOTAL
null null 1482
2016 null 867
2016 1 444
2016 2 423
2015 null 615
2015 2 415
2015 1 200
或类似的东西。主要目的是在与总数进行排序时,不要将“拆分”记录与一年相比。有人可以帮我吗?
答案 0 :(得分:0)
嗯。我认为这样做你想要的:
select year, month, count(sale_id) as cnt
from sales
group by rollup (year, month)
order by sum(count(sale_id)) over (partition by year) desc, year;
实际上,我从未在order by
中使用带有rollup
查询的窗口函数。如果需要子查询,我不会感到惊讶。
答案 1 :(得分:0)
尝试使用窗口函数max
来获取order by子句中每年的最大总数:
select year, month, count(sale_id) total
from sales
group by rollup(year, month)
order by max(total) over (partition by year) desc, total desc;
答案 2 :(得分:0)
我认为您需要使用GROUPING SETS和GROUP_ID。这些将帮助您确定由小计引起的NULL。请查看文档:{{3}}