2016-11-25 72 views
1

我有一個MySQL數據庫,並且我想將一個人的最低3點累加起來。MySQL獲得用戶的最低3個值

+--------+--------+ 
| Person | Points | 
+--------+--------+ 
| 1  | 15  | 
| 1  | 10  | 
| 1  | 5  | 
| 1  | 10  | 
| 2  | 5  | 
| 2  | 4  | 
| 2  | 3  | 
| 2  | 2  | 
| 3  | 1  | 
| 3  | 1  | 
| 3  | 1  | 
+--------+--------+ 

我想要的結果:

+-------+-----+ 
| 1  | 25 | 
| 2  | 9 | 
| 3  | 3 | 
+-------+-----+ 

但我真的失去了如何解決這個問題。這是我查詢到現在爲止,:

SELECT person, SUM(points) FROM (SELECT SUM(points) FROM table 
GROUP BY person ORDER BY points ASC LIMIT 3) 

這是我的SQL創建腳本:

CREATE TABLE `mytable` (
    `person` int(11) DEFAULT NULL, 
    `points` int(11) DEFAULT NULL 
) ; 

INSERT INTO `mytable` (`person`, `points`) VALUES 
(1, 15), 
(1, 10), 
(1, 5), 
(1, 10), 
(2, 5), 
(2, 4), 
(2, 3), 
(2, 2), 
(3, 1), 
(3, 1), 
(3, 1); 
+0

見[_Groupwise MAX_](http://mysql.rjweb.org/doc.php/groupwise_max)。 –

回答

2

在內部查詢使用行號作爲輔助,以限制rows.Row數量,而不是限制以避免重複值問題。沒有測試過,但它應該工作,懶得創建一個小提琴。

SELECT Person,SUM(Points) FROM 
(SELECT Person,Points, 
CASE Person 
     WHEN @person THEN @rank:= @rank+ 1 
     ELSE @rank:= 1 
    END AS rank, 
    @person:= person 
FROM t, (SELECT @rank:= 0,@person:='') x 
ORDER BY Points ASC)y 
WHERE y.rank<=3 
GROUP BY Persons 

FIDDLE

+0

我試過了,但是我得到的錯誤是:字段列表中未知的collumn'type'。 這是創建表的SQL腳本: 也許你可以用http://sqlfiddle.com幫助我? 我說我創建腳本。 – rraayy

+0

@rraayy我的不好,編輯它。 – Mihai

相關問題