mysql:order - >限制 - >总结......可能吗?

时间:2015-05-27 19:36:32

标签: mysql group-by sum sql-order-by sql-limit

我在以下问题上失去了它:

我有一张参与者和积分表。每个参与者最多可以有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应该从另一个'partcipant'表中解析为真实姓名

+----+------+
| id | name |
+----+------+
| 1  | what |
+----+------+
| 2  | ev   |
+----+------+
| 3  | er   |
+----+------+

但是在某些时候这应该是可行的......我知道......

1 个答案:

答案 0 :(得分:2)

使用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

任意破坏它们之前,我遇到过关系问题