我有下表:
分数:
user_id | match_id | points
1 | 110 | 4
1 | 111 | 3
1 | 112 | 3
2 | 111 | 2
用户在比赛中下注并根据比赛结果获得积分。根据投注的准确程度,您可以获得0分,2分,3分或4分的比赛。
现在我想对用户进行排名,以便我可以看到谁在第一,第二位等... 排名顺序首先是total_points。如果这些是相等的,则按用户得分为4分的次数排序,然后用户得分为3分等等。
为此,我需要下表:
user_id | total_points | #_of_fours | #_of_threes | #_of_twos
1 | 10 | 1 | 2 | 0
2 | 2 | 0 | 0 | 1
但是我无法弄清楚哪些联接语句会帮助我理解它。
这是我没有帮助的结果:
SELECT user_id,COUNT(points)AS #_of_fours FROM scores WHERE points = 4 GROUP BY user_id
结果是
user_id | #_of_fours
1 | 1
2 | 0
现在我必须为#_of_threes和twos以及总积分做到这一点并将它们加在一起,但我无法弄清楚如何。
BTW我正在使用MySQL。
任何帮助都会非常令人沮丧。提前致谢
答案 0 :(得分:2)
SELECT user_id
, sum(points) as total_points
, sum(case when points = 4 then 1 end) AS #_of_fours
, sum(case when points = 3 then 1 end) AS #_of_threes
, sum(case when points = 2 then 1 end) AS #_of_twos
FROM scores
GROUP BY
user_id
答案 1 :(得分:1)
使用mysql语法,您可以使用SUM
轻松计算匹配的行;
SELECT
user_id,
SUM(points) AS total_points,
SUM(points=4) AS no_of_fours,
SUM(points=3) AS no_of_threes,
SUM(points=2) AS no_of_twos
FROM Table1
GROUP BY user_id;
演示here。