在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
相关产品推荐
相关产品推荐

