SQL查询优化:实现2022年汽车折扣后均价的无重复月度聚合
解决按月统计汽车折扣后均价的问题
原查询出现月份重复的核心问题是:你用了GROUP BY date,这是按具体日期分组,同一个月里的不同日期会被拆成不同组,自然会输出多条同月份的记录。要实现每月一条聚合数据,得按年份和月份来分组,修改后的SQL如下:
SELECT EXTRACT(MONTH FROM date) AS month, EXTRACT(YEAR FROM date) AS year, ROUND(AVG(price * (100 - discount) / 100), 2) AS price_avg FROM brandorigin WHERE EXTRACT(YEAR FROM date) = 2022 GROUP BY EXTRACT(YEAR FROM date), EXTRACT(MONTH FROM date) ORDER BY month ASC;
关键修改说明:
- 将
GROUP BY date替换为GROUP BY EXTRACT(YEAR FROM date), EXTRACT(MONTH FROM date):这样同一年同一月的所有数据会被合并为一组,刚好对应每月一条聚合结果 - WHERE条件里的
'2022'去掉引号,因为EXTRACT返回数值类型,直接用2022更严谨 - 排序改为按
month升序,比按原date排序更贴合月度统计的需求
内容的提问来源于stack exchange,提问作者xflx
相关产品推荐
相关产品推荐

