oracle中的keep和over的區別?
keep就是個關鍵字,指明后面的括號里是按照指定規則排名的top 1或bottom1,因為是dense_rank排名,所以可能有重復的,外面用min/max那么只返回一個值,比如用sum可能匯總多個相同值。ver指定分區,如果沒有over則是對所有行應用一次分析函數,因此結果就一行,有over并且指定了分區,那么分析函數的計算范圍就在此分區內,對此分區每一行都使用分析函數,分區內的每一行的分析函數值是一樣的,而且最終返回的行和總行數相同。或有over里面沒有分區則是對每一行應用分析函數,計算范圍是所有行,因此所有行返回的分析函數值都一樣。
當然還可以與group by結合,那就很復雜了,也很常見,反正這個函數就是求top1或bottom1的。