Oracle sql:Order by与GROUP by汇总

Oracle sql:Order by与GROUP by汇总,sql,oracle,group-by,sql-order-by,rollup,Sql,Oracle,Group By,Sql Order 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

我到处寻找答案,但似乎没有什么比得上我的问题。因此,使用带查询的汇总:

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

或者类似的。主要目的是在将记录与总计进行排序时,不将记录与一年进行“拆分”。有人能帮我吗?

嗯。我想这正是你想要的:

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;

实际上,我从来没有在
orderby
查询中使用过窗口函数。如果需要子查询,我不会感到惊讶。

尝试使用窗口函数
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;

我认为您需要使用分组集和分组ID。这些将帮助您确定小计导致的空值。看一下文档: