MySQL将select与来自其他表的sum结合起来

时间:2012-06-28 09:44:33

标签: php mysql sql select sum

我对MySQL并不是很了解,但我需要一个声明,我真的很感谢你对此的帮助。

我有两张桌子:'用户'和'得分'

这是“用户”的结构:

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

这里是'得分'的结构:

| 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_id从'user'连接到每行的'score'中的score_user_id。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:6)

您只需按用户分组:

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上查看。