SQL中使用GROUP BY 1,2,…,n是否有更简洁的语法糖?
SQL按前N列分组的简化写法说明
你当前使用的写法是SQL标准支持的「按SELECT列的位置序号分组」语法:
SELECT dim_1,dim_2,...,dim_n,agg_function(metric_1),...agg_function(metric_k) FROM table GROUP BY 1,2,...,n
你想要的类似GROUP BY 1-n的区间简写写法,目前没有全量SQL引擎的通用支持,不同数据库的支持情况如下:
- 主流通用数据库(MySQL、Oracle、SQL Server、PostgreSQL 14及更早版本)不支持这类区间简写,你需要完整列出所有分组对应的序号或者列名。
- 部分新式数仓/查询引擎支持更简化的写法:
- DuckDB、BigQuery、PostgreSQL 15及以上版本支持
GROUP BY ALL语法,会自动识别SELECT子句中所有非聚合的维度列进行分组,你不需要手动写任何分组序号或者列名,完全实现你需要的效果,示例写法如下:SELECT dim_1,dim_2,...,dim_n,agg_function(metric_1),...agg_function(metric_k) FROM table GROUP BY ALL - BigQuery额外支持
GROUP BY 1 TO n的区间写法,比如你要按前3列分组,直接写GROUP BY 1 TO 3即可,完全匹配你提到的GROUP BY 1-n的需求。
- DuckDB、BigQuery、PostgreSQL 15及以上版本支持
注意:生产环境核心查询更推荐直接写列名分组,用位置序号或者自动分组的写法如果后续调整SELECT的列顺序、增减维度时,很容易出现GROUP BY逻辑和预期不符的问题,排查成本很高。
内容的提问来源于stack exchange,提问作者Imad
相关产品推荐
相关产品推荐

