sql - Oracle SQL : Order by with GROUP 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     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;

实际上,我从未在带有 rollup 查询的 order by 中使用窗口函数。如果需要子查询,我不会感到惊讶。

关于sql - Oracle SQL : Order by with GROUP BY ROLLUP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096686/

相关文章:

java - Oracle 和 Java 中出现 UTF-8 字符问题

mysql - 按值分组,也可以在其他行中找到

SQL 日期重叠

mysql - 从 SQL 表中删除与其他表内有连接的条目

oracle - 使用输出变量动态调用 PL/SQL 过程

oracle - 将时间戳转换为带时区的时间戳

php - 对来自 MySql 的记录进行分组

php - 分页之前的多维 groupBy 和 orderBy - Laravel 5

sql - MS Access 中的条件默认值

mysql - 如何使用自定义 MySQL 函数对第二列进行条件排序?