表是这样的:
ratio|user
0.1|2
0.3|2
1 |2
1 |2
0.4|3
0.7|3
查询应该为每个用户返回比率为1的次数,或者,如果该用户没有比率为1,则返回最高比率。对于上面的表,查询应该返回:
2|2
3|0.7
因为有两个"1"用户2的比率值,用户3的最高比率为0.7。
我现在拥有的是select user,count(ratio) from table where ratio = 1 group by user;
,但显然它在要求的第二部分失败了。我应该做一个子表已经与第一个查询的结果填充…?
使用CASE
表达式在计数和最大值之间进行选择:
SELECT user, CASE WHEN SUM(ratio = 1) > 0
THEN SUM(ratio = 1) ELSE MAX(ratio) END AS ratio
FROM yourTable
GROUP BY user;
我认为这可以通过两步来完成:
select user,count(ratio) as column2 from table where ratio = 1 group by user
union
select user,max(ratio) as column2 from table where ratio <> 1 group by user