mysql - MySQL group by 仅针对特定数量的记录(在 JOIN 表达式中查询)
问题描述
我有一个历史表,它代表某种聊天程序存储的消息。
它有一个用户 ID、消息和日期时间。(指定于:http ://sqlfiddle.com/#!9/49fcefb/5 )
现在,我想要的结果包含:
- 按日期输入的最大消息量
- 哪个用户拥有最多的消息以及该用户键入了多少条消息)
我让它工作了,但我发现查询相当慢,我认为这是因为最后一个 GROUP BY (GROUP BY b.cnt) 因为这将对找到的所有记录进行分组。
询问:
SELECT b.cnt as dayCount, a.cnt as userCount, a.userid as userId, b.date
FROM (
select date_added as date, user_id as userid, count(*) as cnt from history group by userid, day(date_added),month(date_added),year(date_added)
) a
INNER JOIN (
select date_added as date, count(*) as cnt from history group by day(date_added),month(date_added),year(date_added)
) b ON year(a.date) = year(b.date)
AND month(a.date) = month(b.date)
AND day(a.date) = day(b.date)
GROUP BY b.cnt
ORDER BY dayCount desc, userCount desc limit 10;
有人可以建议我如何解决这个问题吗?也许有另一种查询?
提前致谢!
解决方案
似乎你加入了错误的标准。
第一个表正在获取用户数,第二个表正在获取每个 user_id 的天数。见dbfiddle
SELECT b.cnt as dayCount, a.cnt as userCount, a.userid as userId, b.date
FROM (
select
user_id as userid
, count(*) as cnt
from history
group by userid
) a
LEFT JOIN (
select cast(date_added as date) as date
, count(*) as cnt
, user_id as userid
from history
group by cast(date_added as date)
) b ON a.userid = b.userid
ORDER BY dayCount desc, userCount desc limit 10;
推荐阅读
- solr - Solr Boost-Function on Sales
- python - 与广播连接
- sql-server - 使用 Laravel 将错误的本地日期格式保存到 SQL Server
- html - CSS中的渐变颜色与百分比
- python - How to start listing keys after a new line in a block
- java - 带有 LocalDateTime 问题的 Spring Thymeleaf
- powerbi - 在两个表之间建立关系后,“显示没有数据的项目”功能不起作用。如何解决这个问题?
- html - 浏览器调整大小时将子 div 文本换行到下一行
- javascript - pdf阅读器中的放大/缩小画布,导致鼠标坐标改变它的位置
- java - ListView 仅显示 ListView 第一个位置的最后一项