SQL嵌套查询中count与group by搭配使用报错如何解决
问题原因分析
- 逻辑冗余:不需要嵌套子查询,直接对原
ratings表做筛选统计即可实现需求 - GROUP BY使用错误:目标是统计2000年所有评分的总数量,仅需返回单条统计结果,不需要添加GROUP BY语句;原写法中GROUP BY后跟子查询别名
NrOfRatings属于逻辑错误,无法得到正确分组结果 - 函数重复调用:原语句多次执行
FROM_UNIXTIME、CAST转换,增加不必要的性能开销
正确实现方案
两种写法可选:
写法1:简洁易读
SELECT COUNT(*) AS NrOfRatings FROM ratings WHERE YEAR(FROM_UNIXTIME(`timestamp`)) = 2000;
写法2:性能优化版(推荐)
SELECT COUNT(*) AS NrOfRatings FROM ratings WHERE `timestamp` >= UNIX_TIMESTAMP('2000-01-01 00:00:00') AND `timestamp` < UNIX_TIMESTAMP('2001-01-01 00:00:00');
这种写法直接对timestamp字段做数值范围比较,不需要对每行数据做时间格式转换,如果timestamp字段建有索引,可以大幅提升查询效率。
内容的提问来源于stack exchange,提问作者rakh
相关产品推荐
相关产品推荐

