【问题标题】:mysql: order -> limit -> sum... possible?mysql:订单->限制->总和......可能吗?
【发布时间】:2015-08-10 01:54:30
【问题描述】:

由于以下问题,我失去了它:

我有一张桌子,上面有参与者和积分。每个参与者最多可以有 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    |
+---------------+--------+

(它应该按结果点排序)

这完全可以用mysql吗?在一个查询中?

哦,生成的参与者 ID 应该从另一个“参与者”表中解析为真实姓名,其中

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

但这应该可以在某个时候加入...我知道...

【问题讨论】:

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


    【解决方案1】:

    使用来自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 任意破坏它们之前遇到了关系问题

    【讨论】:

    • 你能给我举个例子吗?也许在上面的示例表上?
    • 嗯,重新阅读你想要每个参与者的前 X,这比我最初阅读的要丑陋一些,我希望 msdn.microsoft.com/en-ca/library/ms186734.aspx 所以我可以分区。但我们可以捏造它以适应 mysql。我最终使用了来自stackoverflow.com/questions/1895110/row-number-in-mysql 的答案之一......呃编辑答案,因为我无法粘贴足够的内容
    • 令人印象深刻!非常感谢!这完美!
    • 因为我也想在这方面做得更好并学习这些东西,请您通过逐步解释如何构建此查询来启发我?
    • 好的...毕竟似乎不起作用...如果我将其应用于我的数据库并为一位参与者添加 10 行,它将不起作用。应用子选择的行号结果是 7 乘以 7 和 3 乘以 10...这个参与者的分数是 7 乘以 5 和 3 乘以 0...所以我猜这就是问题所在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多