【发布时间】:2019-10-02 05:18:34
【问题描述】:
数据库:
- 用户 - id、名称
- 消息 - 发件人、详细信息、收件人
SELECT
id, COUNT(sender) AS COUNT,
RANK() OVER (ORDER BY COUNT(sender) DESC) count_rank
FROM
`message`
LEFT JOIN
`user` ON id = sender
GROUP BY
sender
ORDER BY
COUNT(sender) DESC;
+----+-------+-----------+
| id | count | count_rank|
+----+-------+-----------+
| 7 | 20 | 1 |
| 4 | 18 | 2 |
| 9 | 18 | 2 |
| 2 | 7 | 4 |
| 5 | 4 | 5 |
+----+-------+-----------+
在这个输出上,我只想得到 ID 9 的计数和排名
我试试
SELECT
id, COUNT(sender) AS COUNT,
RANK() OVER (ORDER BY COUNT(sender) DESC) count_rank
FROM
`message`
LEFT JOIN
`user` ON id = sender
WHERE
`message`.`sender` = 9
GROUP BY
sender
ORDER BY
COUNT(sender) DESC;
但是我的排名是错误的
我的结果:Id 9 rank 1
预期:Id 9 rank 2
【问题讨论】:
-
如果您已经使用 id=9 过滤了结果,您将不会产生与
rank()相同的结果。您只需要一个subquery。见 Tim Biegeleisen 的回答,你也可以使用select * from ([your original query]) t1, where t1.id = 9
标签: mysql sql where-clause rank