2013-06-28 175 views
0

我有一個簡單模式的表格:user_id,score我想提取最高分數的n條記錄,這樣每個user_id只表示一次。從表格中選擇最多n條記錄,每組最多一條記錄

這個問題類似於Get top n records for each group of grouped results,不同之處在於,不需要每個組需要n個代表,我需要n個表的代表,每個組最多有一個記錄。

因此,如果我在找N = 3,運行查詢:

user_id | score 
     1 | 10 
     2 |  9 
     1 | 11 
     2 |  8 
     3 |  8 
     4 | 12 

應該產生:

user_id | score 
     4 |  12 
     1 |  11 
     2 |  9 

回答

2
SELECT user_id, MAX(score) FROM table GROUP BY user_id ORDER BY MAX(score) DESC LIMIT 3; 
+0

哇哦,我是gymnasting通過自我加入和子查詢和所有的東西,很高興它有一個簡單的解決方案! – Mala

+1

@Mala:那麼你還在想'RBAR - 通過Agonizing Row排。相反,學會「逐列」思考;在這種情況下,前3名用戶的最高分數很快會導致此解決方案。 –

+0

如果我在表中添加了一個日期列,我怎麼能擴展它以返回正確的日期?選擇日期的微小擴展也會返回第一個日期,而不是與最高分數相關的日期 – Mala