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。这些将帮助您确定小计导致的空值。看一下文档: