我有一个包含多个用户记录的表,按日期排序。用户的统计数据保留在那里,并为每个事件创建一个新条目。
我创建了一个查询,根据事件:
获取前10个用户SELECT * FROM (
SELECT name, COUNT( * ) AS occurrences
FROM users
GROUP BY name
ORDER BY occurrences DESC LIMIT 10
) AS rank;
它会正确报告所有前10位用户以及每次显示的次数。
但是,我希望能够搜索某个用户,并且不仅会报告他出现的次数,还会报告他的整体排名。如果按发生次数排序所有用户,则排名将是他在列表中的位置。我一直在尝试使用SELECT ROW_NUMBER(),但我总是得到无效的语法,不幸的是,我不确定我做错了什么。我一直在尝试我在网上找到的随机内容,但似乎都没有。
找到用户排名的最佳方法是什么?只有一个查询,如果可能的话。
谢谢, 努诺
答案 0 :(得分:3)
基于我在评论中链接的答案,我正在摆弄它并想出了这个:
SELECT *
FROM (
SELECT NAME, occurrences, @rownum := @rownum + 1 AS position
FROM (
SELECT NAME, COUNT(*) AS occurrences
FROM users
GROUP BY NAME
ORDER BY occurrences DESC LIMIT 10
) a
JOIN (
SELECT @rownum := 0
) r
) b
WHERE NAME = "bbb"
此查询根据COUNT返回用户及其位置。
如果您只想要带有排名的有序列表,只需删除外部选择:
SELECT name,occurrences,@rownum := @rownum + 1 AS position
FROM (
SELECT name, COUNT(*) AS occurrences
FROM users
GROUP BY name
ORDER BY occurrences DESC LIMIT 10
) a
JOIN (SELECT @rownum := 0) r;