簡體   English   中英

Oracle sql:使用GROUP BY ROLLUP進行排序

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM