如何构造此查询? (按COUNT()排序并加入用户表)

时间:2010-04-22 01:42:11

标签: sql mysql database

用户表:

id-user-other columns

得分表:

id-user_id-score-other columns

每个用户只有一行,但只有两个分数。 (0或1,==赢或输)。所以我想按胜利数量输出所有用户,以及按损失数量排序的所有用户。

我知道如何通过遍历每个用户来做到这一点,但我想知道如何使用一个查询来完成它。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:4)

如果您想要两个输出,则需要两个查询

SELECT u.user,
COUNT(s.score) as WINS
FROM users u INNER JOIN scores s
     ON u.user_id = s.user_id 
WHERE s.score = 1
GROUP BY u.user_id (and any other columns you need from the user table)
ORDER BY WINS

然后再对损失进行另一个查询 基本上这与亚当斯的回应相同,但他的回复将为您提供按胜利排序的用户列表,然后按损失排序。 要获得损失,只需将s.score = 1更改为s.score = 0

答案 1 :(得分:0)

尝试这样的事情:

SELECT u.user, 
       COALESCE(SUM(s.score), 0) AS WINS,
       SUM(CASE WHEN s.score = 0 THEN 1 ELSE s.score END) AS LOSSES 
  FROM users u
       LEFT JOIN scores s
       ON u.id = s.user_id
GROUP BY u.user
ORDER BY WINS, LOSSES