SQL - 计算具有组合总和的记录数

Nig*_*gel 1 mysql sql aggregate-functions

我有一个类似于这样的用户表:

|  ID  |  DONATION  |   RANK   |
|  4   |        10  |     12   |
|  9   |        20  |      8   |
|  2   |        40  |      5   |
|  3   |        80  |      2   |
Run Code Online (Sandbox Code Playgroud)

我想构建一个查询,在那里我检索捐赠总和小于100的用户数,按排名排序......类似(显然不正确):

select count(*) where sum(donation) < 100 order by rank
Run Code Online (Sandbox Code Playgroud)

如果可能的话,无法弄清楚如何做到这一点.甚至不确定我是否正确地采取这种方式.任何想法或指针?

Vin*_*ard 6

WHERE仅适用于列或表达式,如果要使用聚合函数(如SUM)进行过滤,则必须使用HAVING.例如 :

  SELECT COUNT(*)
    FROM your_table
  HAVING SUM(donation) < 100 
Run Code Online (Sandbox Code Playgroud)

如果没有有效的GROUP BY,这个查询就没有意义,但是你明白了这一点:使用HAVING过滤聚合函数.从技术上讲,您应该按用户ID进行分组,然后进行计数,并对计数求和.