查詢結果里包含子查詢—分組排序取前幾的問題


逛貼吧看到有個面試sql的題目,他答案根本風牛馬不相及,想起來最近看到的那個分組排序取前幾的。

1.貼吧里面試題的sql

 要求結果是:

sql: 

--結果是day,success,fail數量
select day_id as day,
(select count(1) from r_test b where a.day_id = b.day_id and b.result = 'success') as success,
 (select count(1) from r_test c where a.day_id = c.day_id and c.result = 'fail') as fail
from r_test a group by day_id order by day_id asc

 

 

2.分組排序取前幾的,例如先建個表:按group分組,取分數前3的。oracle有分組排序取前幾的函數。

a.不用函數寫,不重復名次時候沒問題(但是名次重復了有問題)。

 

 主要想法是多一個字段給排序用

 

b.用oracle分組排序函數寫。ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

也是給它多一個字段

 

分組排序這個問題

改一下數:B分組里取前兩名,並列的兩名都要查詢到。

表數據:

上面那兩條sql會造成:

第一條,用a.score > = b.score 這個條件,如果並列第二名,會出現nm這個字段查出來為1,3,3沒有2.  所以這么寫還是錯的。第一條查不出第二名因為nm為1,3,3 ;

第二條只能查出一個並列的另一個查不出來。

第二條結果:

 剛剛想了想,最終解決辦法:

針對我的這種要求(且取前兩名,並列的兩名都要查詢到。),不使用函數而使用第一種做法,改一下后面那個nm<=2的條件

有更好的辦法再補充。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM