[英]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.