2017-02-07 138 views
2

我正在寻找一个答案,但似乎没有什么比较我的问题。因此,使用汇总与查询:Oracle sql:通过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 

或类似的东西。主要目的是在整体分类时不会“分割”与一年相比的记录。有人可以帮助我吗?

回答

0

嗯。我想这你想要做什么:

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查询。如果子查询是必要的,我不会感到惊讶。

+0

似乎工作正常,谢谢! –

0

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