【问题标题】:MySQL combine select with sum from other tableMySQL将select与其他表中的sum结合起来
【发布时间】:2012-06-29 19:32:43
【问题描述】:

我不是很喜欢 MySQL,但我只需要一个声明,我非常感谢您在这方面的帮助。

我有两个表:'user' 和 'score'

这是“用户”的结构:

| user_id | user_name |
| 1       | Paul      |
| 2       | Peter     |

这是'score'的结构:

| score_id | score_user_id | score_track_id | score_points | 
| 1        | 2             | 23             | 200          |
| 2        | 2             | 25             | 150          |

现在我需要一个能够为我提供某种高分列表的查询。结果应包含 user_id、user_name 和与用户相关的所有分数的总和:我应该如下所示:

| user_id | user_name | scores |
| 1       | Paul      | 0      |
| 2       | Peter     | 350    |

如果将结果按照用户在全球排名中的位置排序,则更好:

| position | user_id | user_name | scores |
| 1        | 2       | Peter     | 350    |
| 2        | 1       | Paul      | 0      |

我试过这个说法

SELECT user_id as current_user, user_name, SUM(SELECT score_points FROM score WHERE score_user_id = current_user) as ranking FROM user ORDER BY ranking DESC

这会导致语法错误。 对我来说主要的问题是将'user'中的user_id连接到每行'score'中的score_user_id。

非常感谢您的帮助

【问题讨论】:

    标签: php mysql sql select sum


    【解决方案1】:

    您只需按用户对分数进行分组:

    SELECT @p:=@p+1 AS position, t.*
    FROM (
      SELECT   user.user_id,
               user.user_name,
               IFNULL(SUM(score.score_points),0) AS total_points
      FROM     user LEFT JOIN score ON user.user_id = score.score_user_id
      GROUP BY user.user_id
      ORDER BY total_points DESC
    ) AS t JOIN (SELECT @p:=0) AS initialisation
    

    sqlfiddle 上查看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 2014-05-31
      • 2018-07-27
      • 1970-01-01
      相关资源
      最近更新 更多