Mysql 使用COUNT(ID)和having获得排名

Mysql 使用COUNT(ID)和having获得排名,mysql,ranking,having,Mysql,Ranking,Having,我有一个查询,其中我得到了一个用户的排名 该表如下所示,按点排序: ----------------- | user | points | ----------------- paul1 22000 paul 13440 paul5 1400 paul2 1300 paul3 1300 paul4 1300 . . . . . . SELECT user, points FRO

我有一个查询,其中我得到了一个用户的排名

该表如下所示,按点排序:

-----------------
| user | points |
-----------------
  paul1   22000
  paul    13440
  paul5    1400
  paul2    1300
  paul3    1300
  paul4    1300
   .        .
   .        .
   .        .

SELECT user, points
FROM table1 
WHERE points>= 1300 
HAVING user <= 'paul3' OR points > 1300 
ORDER BY points DESC, user ASC
此查询返回所需的正确数据,但在本例中,我只需要第5行的数量,因此我尝试按如下方式修改查询:

SELECT COUNT(ID) AS num, user, points
FROM table1 
WHERE points>= 1300 
HAVING user <= 'paul3' OR points > 1300 
ORDER BY points DESC, user ASC
但这里它返回num=6,我完全不明白为什么

有什么想法吗


非常感谢

尝试统计所有不同的用户:

    SELECT COUNT(DISTINCT user) AS num
FROM table1 
WHERE points>= 1300 
HAVING user <= 'paul3' OR points > 1300 
ORDER BY points DESC, user ASC
为什么要同时使用where和having子句而不使用聚合?您的查询相当于:

SELECT user, points
FROM table1 
WHERE (user <= 'paul3' and points = 1300) OR (points > 1300) 
ORDER BY points DESC, user ASC
查询不执行所需操作的原因是having子句是在聚合之后计算的。它过滤聚合的结果,而不是进入聚合的行的结果

SELECT COUNT(*)
FROM table1 
WHERE (user <= 'paul3' and points = 1300) OR (points > 1300) 
ORDER BY points DESC, user ASC;