繁体   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