我有一个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 :(得分:2)
在内部查询中使用行号作为帮助来限制行数。但是数量并不限制以避免重复值问题。没有经过测试但它应该有效,懒得创建小提琴。
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