SQL 计数或最大值 (sqlite)
SQL count or max (sqlite)
table是这样的:
ratio|user
0.1|2
0.3|2
1 |2
1 |2
0.4|3
0.7|3
查询应该return,对于每个用户,比率为 1 的次数,或者,如果该用户没有 1 比率,则为最高比率。所以给定上面的 table,查询应该 return:
2|2
3|0.7
因为用户 2 的比率有两个“1”值,用户 3 的最高比率是 0.7。
我现在拥有的是select user,count(ratio) from table where ratio = 1 group by user;
,但显然在要求的第二部分失败了。我是否应该创建一个已经填充了第一个查询结果的子 table...?
使用 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
table是这样的:
ratio|user
0.1|2
0.3|2
1 |2
1 |2
0.4|3
0.7|3
查询应该return,对于每个用户,比率为 1 的次数,或者,如果该用户没有 1 比率,则为最高比率。所以给定上面的 table,查询应该 return:
2|2
3|0.7
因为用户 2 的比率有两个“1”值,用户 3 的最高比率是 0.7。
我现在拥有的是select user,count(ratio) from table where ratio = 1 group by user;
,但显然在要求的第二部分失败了。我是否应该创建一个已经填充了第一个查询结果的子 table...?
使用 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