用户表:
id-user-other columns
得分表:
id-user_id-score-other columns
每个用户只有一行,但只有两个分数。 (0或1,==赢或输)。所以我想按胜利数量输出所有用户,以及按损失数量排序的所有用户。
我知道如何通过遍历每个用户来做到这一点,但我想知道如何使用一个查询来完成它。任何帮助表示赞赏!
答案 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