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;