You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MySQL中利用COUNT()和MONTH()查询2018年3月点赞超100的用户

解决2018年3月点赞数超100的用户查询问题

嗨,我来帮你调整SQL语句实现需求!你原来的语句只是筛选出了3月有过点赞记录的用户,但没统计每个用户的点赞总数,也没过滤掉点赞数不足100的情况。咱们可以通过分组和聚合函数来搞定这个问题:

优化后的SQL语句

SELECT u.name
FROM users AS u
JOIN likes AS l ON u.id = l.user_id
WHERE l.timestamp >= '2018-03-01' 
  AND l.timestamp < '2018-04-01'
GROUP BY u.id, u.name
HAVING COUNT(l.id) > 100;

关键修改点说明

  • 日期范围筛选优化:我没有用MONTH()和YEAR()函数,而是直接用时间范围比较。这样做的好处是能利用timestamp字段上的索引(如果有的话),查询效率更高;同时也能避免函数处理时的边界问题,比如准确包含3月的所有时间(包括3月31日23:59:59之后到4月1日0点前的瞬间)。
  • 分组统计:用GROUP BY u.id, u.name把点赞记录按用户分组,确保每个用户只被统计一次(按id分组比按name更可靠,毕竟可能存在重名用户)。
  • 过滤点赞数:HAVING COUNT(l.id) > 100用来在分组后筛选出点赞总数超过100的用户。这里不能用WHERE,因为WHERE是在分组前过滤行,而我们需要的是分组后的聚合结果过滤。

另外,你原来的DISTINCT可以去掉了,因为GROUP BY已经保证了每个用户只会出现在结果里一次。

内容的提问来源于stack exchange,提问作者Stanislav Codes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:31:49