【问题标题】:GROUP BY: shorthandGROUP BY:速记
【发布时间】:2015-05-16 03:16:32
【问题描述】:

我有一个查询(这里更短):

SELECT 
a,b,c 
,SUM(something) as s
FROM table
GROUP BY 1, 2, 3

假设我在 SUM 之前有 23 个列

有没有一种速记方式可以省去我将1,2,3 全部写成23 的麻烦?

【问题讨论】:

  • 不——事实上许多 SQL 系统甚至不允许你在 GROUP BY 中使用列号。
  • 是的。虽然,在 teradata 列序号上仍然有效。无论如何,必须编写 23 个别名,这比编写列序号序列(我可以很容易地用脚本生成)更加耗时
  • 我的意思是,输入 1-23 似乎比输入别名好很多,所以我不认为这是一个巨大的麻烦 :)
  • 我可以输入1-23 吗?在评论中表达你的观点是 SQL 速记还是你自己?
  • 通常最简单的方法是从 SELECT 子句中复制字段,编辑掉任何字段别名,并根据需要更改顺序。如果您更改字段顺序,这具有额外的优势,即不会完全使您的查询变得无聊。我只在 ORDER BY 子句中使用序数,因为我被这个咬了。

标签: sql group-by teradata


【解决方案1】:

试试这个

SELECT DISTINCT
 a,b,c 
 ,SUM(something) OVER(partition by a,b,c) as s
FROM table

【讨论】:

  • 不确定这是否可行,因为您没有在窗口 SUM 子句的 OVER 部分中指定分区。因此,我希望将整个“某物”列的总和分配给每一行
  • 没错,我通过在分区子句中添加列来修复它。
  • 这怎么比group by 1,2,3,...短?此外,它消耗更多的资源。
  • 它避免了GROUP BY,这就是最初的问题。诚然,它比预期的聚合操作更糟糕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2021-01-13
  • 2023-03-17
  • 1970-01-01
  • 2016-01-27
相关资源
最近更新 更多