【问题标题】:Simple stats page ranking with MySQL使用 MySQL 的简单统计页面排名
【发布时间】:2013-06-29 18:47:16
【问题描述】:

出于某种原因,这似乎很容易,但我无法弄清楚。所以我有一个名为“contest_entries”的表,其中有“用户名”和“评级”列。

表格内容如下:

Username | rating | Contest_id
John     | 3      |   4
Mike     | 1      |   4
Eric     | 3      |   5
Mike     | 1      |   6
John     | 2      |   7
Mike     | 1      |   8 
John     | 1      |   9

所以对于不同的比赛,人们可以安排不同的位置,

我的问题是如何显示一个用户名赢得了多少次比赛,获得了第二名或第三名(获得第一名,也就是评级=1,第二名是评级=2,第三名是评级=3)并列出所有用户名也是如此,即使用户名从未获得过第 1、第 2、第 3 名。最后按获胜次数最多的人(“rating=1”最多的人)对他们进行排名。

所以它看起来像这样:

Username   |  Ranking | 1st places | Second Places | Third Places
Mike       |     1    |    3       |    0          |    0
John       |     2    |    1       |    1          |    1
Eric       |     3    |    0       |    0          |    1

etc etc.

【问题讨论】:

    标签: php mysql ranking


    【解决方案1】:
    SELECT x.username
         , COUNT(CASE WHEN rating = 1 THEN 'foo' END) first 
         , COUNT(CASE WHEN rating = 2 THEN 'foo' END) second 
         , COUNT(CASE WHEN rating = 3 THEN 'foo' END) third
      FROM ratings x 
     GROUP 
        BY username;
    

    【讨论】:

    • 好吧,那是在正确的轨道上! (我更改了表名 obv)但是我如何列出其余的用户名,即使他们没有排在前 3 名?另外,我将如何根据获胜次数对它们进行排序!到目前为止,这很有帮助!
    【解决方案2】:

    试试

    SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`
      FROM
    (
      SELECT username,
      SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`,
      SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd places`,
      SUM(CASE WHEN rating = 3 THEN 1 ELSE 0 END) `3rd places`
        FROM Table1
       GROUP BY username
       ORDER BY `1st places` DESC
    ) q, (SELECT @n := 0) n
    

    输出:

    |用户名 |排名 |第一名 |第二名 |第三名 | -------------------------------------------------- ------------ |迈克 | 1 | 3 | 0 | 0 | |约翰 | 2 | 1 | 1 | 1 | |埃里克 | 3 | 0 | 0 | 1 |

    这里是SQLFiddle演示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2017-08-29
      • 1970-01-01
      • 2022-12-05
      • 2020-10-21
      相关资源
      最近更新 更多