[英]Oracle sql: Order by with GROUP BY ROLLUP
我到处都在寻找答案,但是似乎没有什么可以和我的问题相提并论。 因此,对查询使用汇总:
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
我想按总降序排序,但我希望将拥有最高总年数的年份放在首位(重要:与该年比较的所有记录),然后再列出其他年份的其他记录。 所以我希望它看起来像:
YEAR MONTH TOTAL
null null 1482
2016 null 867
2016 1 444
2016 2 423
2015 null 615
2015 2 415
2015 1 200
或类似的东西。 主要目的是在与总数进行排序时,不要“拆分”与一年相比的记录。 有人可以帮我吗?
嗯。 我认为这可以满足您的需求:
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
查询order by
使用窗口函数。 如果需要子查询,我不会感到惊讶。
尝试使用窗口函数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;
我认为您需要使用GROUPING SETS和GROUP_ID。 这些将帮助您确定由小计引起的NULL。 看一下文档: https : //docs.oracle.com/cd/B19306_01/server.102/b14223/aggreg.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.