我因以下问题而失去了它:
我有一张包含参与者和积分的表格。每个参与者最多可以有 11 分条目,我只想要前 6 分的总和。
在此示例中,假设我们想要 3 个中的前 2 个
+----+---------------+--------+
| id | participantid | points |
+----+---------------+--------+
| 1 | 1 | 11 |
+----+---------------+--------+
| 2 | 3 | 1 |
+----+---------------+--------+
| 3 | 3 | 4 |
+----+---------------+--------+
| 4 | 2 | 3 |
+----+---------------+--------+
| 5 | 1 | 5 |
+----+---------------+--------+
| 6 | 2 | 10 |
+----+---------------+--------+
| 7 | 2 | 9 |
+----+---------------+--------+
| 8 | 1 | 3 |
+----+---------------+--------+
| 9 | 3 | 4 |
+----+---------------+--------+
因此我想要类似的东西
+---------------+--------+
| participantid | points |
+---------------+--------+
| 2 | 19 |
+---------------+--------+
| 1 | 16 |
+---------------+--------+
| 3 | 8 |
+---------------+--------+
(应按结果点进行 DESC 排序)
这对于 mysql 来说是可能的吗?在一个查询中?
哦,生成的参与者 ID 应该解析为另一个“参与者”表中的真实姓名,其中
+----+------+
| id | name |
+----+------+
| 1 | what |
+----+------+
| 2 | ev |
+----+------+
| 3 | er |
+----+------+
但这应该可以通过在某个时刻加入来实现......我知道......
最佳答案
使用 ROW_NUMBER() in MySQL 中的答案之一行数,然后修改以获得顶部。
SELECT ParticipantId, SUM(Points)
FROM
(
SELECT a.participantid, a.points, a.id, count(*) as row_number
FROM scores a
JOIN scores b ON a.participantid = b.participantid AND cast(concat(a.points,'.', a.id) as decimal) <= cast(concat(b.points,'.', b.id) as decimal)
GROUP BY a.participantid, a.points, a.id
) C
WHERE row_number IN (1,2)
GROUP BY ParticipantId
关系有问题,直到我用 ID 任意破坏它们
关于mysql:顺序 ->限制 ->总和...可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491620/