2017-02-07 5 views
2

私はどこでも答えを探していますが、何も私の問題と比較することはできません。だから、クエリで集計を使用した:(Oracle sql:で注文するGROUP BY ROLLUP

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でソートしたいと思いますが、私は一番上にあることを最大の合計で年をしたいと思います:

select year, month, count (sale_id) from sales 
group by rollup (year, month); 

のような結果が得られます重要:その年と比較したすべてのレコード)、そして他の年のレコード。ですから、私はそれを次のようにしたいと考えています:

YEAR  MONTH  TOTAL 
    null  null 1482 
    2016  null  867 
    2016   1  444 
    2016   2  423 
    2015  null  615 
    2015   2  415 
    2015   1  200 

またはそういうものです。主な目的は、合計でソートしながら1年間と比較してレコードを分割しないことです。誰か助けてくれますか?

答えて

0

Hmmm。私はこれが何をしたいんだと思う:

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にウィンドウ関数を使用したことがありません。サブクエリーが必要な場合、私は驚くことはありません。

+0

ありがとう、ありがとう! –

0

は、ORDER BY句の各年の合計の最大値を取得するために、窓関数maxを使用してみてください:

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;