oracleでgroupbyを使わずにmaxを使う方法
はい、ぶっちゃけなんじゃこりゃと思って、これで動くのかと思ったので、調査した結果を残しておきます。
結論から書くと、group byをしなくてもmaxでかけました。
普通の書き方
ただまあ、group byを明示的にしないと、毎回partition byを書かなきゃいけない地獄が待っているからあんまり良く無い。
keep (dense_rank first order by xxx )
みたいなことをやりたい場合の併用で無理やりやってる例を見てて、読みづらいなあ、とは思いました。
はい、ぶっちゃけなんじゃこりゃと思って、これで動くのかと思ったので、調査した結果を残しておきます。
結論から書くと、group byをしなくてもmaxでかけました。
普通の書き方
動くけど良くない書き方
select dat1, max(dat2) as max_dat2
from table
group by dat1
これで動いちゃった。確かに言いたいことはわかる。
select dat1, max(dat2) over (partition by dat2) as max_dat2
from table
ただまあ、group byを明示的にしないと、毎回partition byを書かなきゃいけない地獄が待っているからあんまり良く無い。
keep (dense_rank first order by xxx )
みたいなことをやりたい場合の併用で無理やりやってる例を見てて、読みづらいなあ、とは思いました。
コメント