SQL中使用GROUP BY子句前如何按日期过滤数据
解决方案
你无需使用复杂的子查询即可实现需求,直接在GROUP BY前添加WHERE条件过滤日期即可,写法更简洁、执行效率更高:
SELECT Diagnosis, COUNT(*) AS NumberOfDiagnosis FROM EXAMPLE WHERE AdmissionDate < '2020-03-01' GROUP BY Diagnosis
如果你明确需要用子查询/嵌套查询的方式实现,也可以先通过子查询过滤符合日期要求的记录,再在外层执行分组统计:
SELECT Diagnosis, COUNT(*) AS NumberOfDiagnosis FROM ( -- 子查询先过滤出早于2020-03-01的所有记录 SELECT Diagnosis FROM EXAMPLE WHERE AdmissionDate < '2020-03-01' ) AS filtered_data GROUP BY Diagnosis
两种写法的执行结果完全一致,符合你预期的输出:
| Diagnosis | NumberOfDiagnosis |
|---|---|
| Broken Bone | 2 |
| Headache | 1 |
| Cancer | 1 |
内容的提问来源于stack exchange,提问作者DON_DON
相关产品推荐
相关产品推荐

