如何编写SQL查询获取年度第二季度数据 含2011-2016年总利润示例
原代码问题梳理
DATE_PART函数参数使用错误,标准语法为DATE_PART(提取维度, 日期字段),不需要额外传入中间参数2,季度提取结果为1-4的数值,直接判断等于2即可筛选第二季度- GROUP BY逻辑错误,不需要按
sales_date(单日日期)分组,仅需按统计维度「年份」分组即可 - 缺少必要过滤条件:2011-2016年的时间范围、仅第二季度的规则限制
- 未给聚合后的利润总和加别名,后续数据取用不便
正确实现方案
标准SQL写法(适配PostgreSQL等支持DATE_PART的数据库)
SELECT sales_year, 2 AS quarter, SUM(profit) AS total_q2_profit FROM sales_data WHERE sales_year BETWEEN 2011 AND 2016 AND DATE_PART('quarter', sales_date) = 2 GROUP BY sales_year ORDER BY sales_year;
MySQL适配写法
如果使用不支持DATE_PART的MySQL数据库,可调整为:
SELECT sales_year, 2 AS quarter, SUM(profit) AS total_q2_profit FROM sales_data WHERE sales_year BETWEEN 2011 AND 2016 AND QUARTER(sales_date) = 2 GROUP BY sales_year ORDER BY sales_year;
无预存sales_year字段的补充方案
如果你的表中没有提前存储sales_year字段,可以直接从日期字段提取年份进行筛选和分组:
SELECT DATE_PART('year', sales_date) AS sales_year, 2 AS quarter, SUM(profit) AS total_q2_profit FROM sales_data WHERE DATE_PART('year', sales_date) BETWEEN 2011 AND 2016 AND DATE_PART('quarter', sales_date) = 2 GROUP BY DATE_PART('year', sales_date) ORDER BY sales_year;
内容的提问来源于stack exchange,提问作者Sucre
相关产品推荐
相关产品推荐

