代码之家  ›  专栏  ›  技术社区  ›  Ken

SQL计数或最大值(sqlite)

  •  0
  • Ken  · 技术社区  · 2 年前

    桌子是这样的:

    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
    

    因为用户2的比率有两个“1”值,而用户3的最高比率是0.7。

    我现在拥有的是 select user,count(ratio) from table where ratio = 1 group by user; 但显然,这在要求的第二部分是失败的。我是否应该用第一个查询的结果填充一个子表。。。?

    2 回复  |  直到 2 年前
        1
  •  1
  •   Tim Biegeleisen    2 年前

    使用 CASE 要在计数和最高值之间选择的表达式:

    SELECT user, CASE WHEN SUM(ratio = 1) > 0
                      THEN SUM(ratio = 1) ELSE MAX(ratio) END AS ratio
    FROM yourTable
    GROUP BY user;
    
        2
  •  0
  •   HamoriZ    2 年前

    我认为这可以通过以下两个步骤来实现:

    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