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