Snowflake SQL能否用范围语法写GROUP BY?DataGrip动态模板咨询
问题解答
Snowflake SQL的GROUP BY简化写法
不行,Snowflake不支持group by 1:10这种范围式的写法,必须手动列出每个位置序号,比如group by 1, 2, 3, ..., 10。如果你的SELECT语句里所有非聚合字段都是要分组的对象,倒是可以用GROUP BY ALL替代手动列序号——它会自动把SELECT里所有非聚合字段都纳入分组条件。
DataGrip的动态实时模板功能
有的,DataGrip能实现你要的效果,推荐用带Groovy脚本的Live Template,步骤如下:
- 打开
Settings/Preferences→Editor→Live Templates,点击加号新建一个模板组(比如命名为Snowflake SQL)。 - 在这个组里新建Live Template:缩写填
grby,模板文本写group by $NUM_LIST$。 - 点击
Edit Variables,选中NUM_LIST,在Expression框里输入这段Groovy脚本:def maxNum = prompt("输入分组序号的最大值", "4") (1..maxNum as int).join(', ') - 把模板的应用范围设置为SQL,保存设置。
- 之后输入
grby按Tab,会弹出输入框让你填数字,比如输入7,就自动生成group by 1, 2, 3, 4, 5, 6, 7。
要是你想要固定缩写对应固定数量(比如输入grby4直接生成4个序号),也可以给每个数字单独建Live Template,但上面的动态脚本方式更灵活,不用重复创建模板。
内容的提问来源于stack exchange,提问作者Can Tuna
相关产品推荐
相关产品推荐

