MYSQL:获得超过“a”的排名;历史";包含消息的表
SQLfiddle: 我有一张历史记录表:MYSQL:获得超过“a”的排名;历史";包含消息的表,mysql,ranking,Mysql,Ranking,SQLfiddle: 我有一张历史记录表: CREATE TABLE IF NOT EXISTS `history` ( `history_id` int(6), `date_added` datetime, `message` varchar(200), `user_id` int(6) ); 此表由用户在特定空闲通道上发布的消息填充 现在,我想从中获得统计数据,我想知道发布消息最多的日期,与发布消息最多的用户的长时间比较&日期本身 我已经创建了此查询,但我似乎无法在其中实现
CREATE TABLE IF NOT EXISTS `history` (
`history_id` int(6),
`date_added` datetime,
`message` varchar(200),
`user_id` int(6)
);
此表由用户在特定空闲通道上发布的消息填充
现在,我想从中获得统计数据,我想知道发布消息最多的日期,与发布消息最多的用户的长时间比较&日期本身
我已经创建了此查询,但我似乎无法在其中实现“排名”:
SELECT b.cnt as dayCount, a.cnt as userCount, a.userId, b.date as dateStr, u.name as userName
FROM (
select date_format(date_added, "%d/%m/%Y") as date, user_id as userid, count(*) as cnt from history group by userid, date_format(date_added, "%d/%m/%Y") order by cnt
) a
INNER JOIN (
select date_format(date_added, "%d/%m/%Y") as date, count(*) as cnt from history group by date_format(date_added, "%d/%m/%Y")
) b ON a.date = b.date
INNER JOIN users u ON u.user_id = a.userid
GROUP BY a.userId, b.date
ORDER BY dayCount desc, userCount desc;
结果:
+----------+-----------+--------+------------+----------------------+
| dayCount | userCount | userId | dateStr | userName |
+----------+-----------+--------+------------+----------------------+
| 2308 | 842 | 1 | 20/03/2018 | user1 |
| 2308 | 640 | 4 | 20/03/2018 | user4 |
| 2308 | 438 | 6 | 20/03/2018 | user6 |
| 2308 | 288 | 5 | 20/03/2018 | user5 |
| 2308 | 78 | 2 | 20/03/2018 | user2 |
| 2308 | 22 | 3 | 20/03/2018 | user3 |
| 1771 | 672 | 1 | 14/10/2019 | user1 |
| 1771 | 452 | 6 | 14/10/2019 | user6 |
| 1771 | 405 | 4 | 14/10/2019 | user4 |
| 1771 | 189 | 5 | 14/10/2019 | user5 |
| 1771 | 37 | 2 | 14/10/2019 | user2 |
| 1771 | 16 | 3 | 14/10/2019 | user3 |
在列用户名之后,应该有一个列的秩为,表示日期在整个结果集上的排名位置,对于daycount 2308,这应该是1,对于1771,这应该是2
通缉结果:
+----------+-----------+--------+------------+----------------------+--------------+
| dayCount | userCount | userId | dateStr | userName | rank |
+----------+-----------+--------+------------+----------------------+--------------+
| 2308 | 842 | 1 | 20/03/2018 | user1 | 1 |
| 2308 | 640 | 4 | 20/03/2018 | user4 | 1 |
| 2308 | 438 | 6 | 20/03/2018 | user6 | 1 |
| 2308 | 288 | 5 | 20/03/2018 | user5 | 1 |
| 2308 | 78 | 2 | 20/03/2018 | user2 | 1 |
| 2308 | 22 | 3 | 20/03/2018 | user3 | 1 |
| 1771 | 672 | 1 | 14/10/2019 | user1 | 2 |
| 1771 | 452 | 6 | 14/10/2019 | user6 | 2 |
| 1771 | 405 | 4 | 14/10/2019 | user4 | 2 |
| 1771 | 189 | 5 | 14/10/2019 | user5 | 2 |
| 1771 | 37 | 2 | 14/10/2019 | user2 | 2 |
| 1771 | 16 | 3 | 14/10/2019 | user3 | 2 |
我不确定这是不是最好的方法?例如,在历史记录表中有260.000个条目时,查询本身需要0.6秒
提前感谢。请看:(您可能已经完成了三分之一的步骤)我添加了一个SQLFiddle,希望现在很清楚,fiddle是否包含了所需的结果?添加在主帖子中您使用的MySQL版本是什么?