oracleのkeepのdense_rankってmaxだっけ?
はい、ちょっと疑問に思ったので、簡単なSQLを書いてみました。
要するに、maxでもminでも先に優先順位で集約されているから同じっぽい。
sおの優先順位で集約する部分にdescって書くと優先順位が逆転するから、結果はbになる。
結論から言うと、keepでdense_rank使うときはmaxでもminでもどっちでも良さそう。
ただ、この辺は全然詳しくないので、詳しい人がいたら教えてください。
はい、ちょっと疑問に思ったので、簡単なSQLを書いてみました。
これ、結果はこんな感じ。
select
max(key) keep (dense_rank first order by dat) as max_key
, min(key) keep (dense_rank first order by dat) as min_key
, max(key) keep (dense_rank first order by dat desc) as max_desc_key
, min(key) keep (dense_rank first order by dat desc) as min_desc_key
from (
select 'a' as key, 1 as dat from dual
union
select 'b' as key, 2 as dat from dual
)
|MAX_KEY|MIN_KEY|MAX_DESC_KEY|MIN_DESC_KEY|
|-------|-------|------------|------------|
|a|a|b|b|
要するに、maxでもminでも先に優先順位で集約されているから同じっぽい。
sおの優先順位で集約する部分にdescって書くと優先順位が逆転するから、結果はbになる。
結論から言うと、keepでdense_rank使うときはmaxでもminでもどっちでも良さそう。
ただ、この辺は全然詳しくないので、詳しい人がいたら教えてください。
コメント