SQL中能否按刚创建的列分组?含年份+队号统计需求
问题解答
你的示例代码在大多数主流SQL数据库(比如MySQL、PostgreSQL、SQL Server、SQLite等)里是完全可以运行的——这些数据库允许在GROUP BY子句中直接引用SELECT里定义的列别名。
不过要注意,少数严格遵循SQL标准的数据库(比如Oracle 12c之前的版本)不支持这种写法,因为按照SQL标准的执行顺序,GROUP BY是在SELECT之前执行的,这时候别名还没被定义。遇到这种情况,你有两种替代方案:
- 方案一:在
GROUP BY中重复使用原始表达式
SELECT YEAR([TIME VARIABLE]) as years, [TEAM NUMBER], COUNT(*) FROM WEEKLY_WINNERS GROUP BY YEAR([TIME VARIABLE]), [TEAM NUMBER];
- 方案二:先用子查询或CTE提前计算出年份列,再分组统计
WITH team_year_stats AS ( SELECT YEAR([TIME VARIABLE]) as years, [TEAM NUMBER] FROM WEEKLY_WINNERS ) SELECT years, [TEAM NUMBER], COUNT(*) FROM team_year_stats GROUP BY years, [TEAM NUMBER];
这两种写法的兼容性更强,几乎能在所有SQL数据库中正常运行。
内容的提问来源于stack exchange,提问作者repigyou
相关产品推荐
相关产品推荐

