我在雅典娜有一个非常基本的groupby查询,我想用一个别名。我们可以通过将相同的引用放在groupby中来实现这个示例,但是当需要对列进行复杂的修改并且需要在两个地方复制逻辑时,这并不是很方便。我以前也这样做过,现在我有一个声明,复制过来是行不通的。
问题:
SELECT
substr(accountDescriptor, 5) as account,
sum(revenue) as grossRevenue
FROM sales
GROUP BY account
这将引发一个错误:
无法解析别名列“account”
下面是关于别名处理的工作原理。
SELECT
substr(accountDescriptor, 5) as account,
sum(revenue) as grossRevenue
FROM sales
GROUP BY substr(accountDescriptor, 5)
3条答案
按热度按时间klh5stk11#
配置单元中不允许列别名
GROUP BY
--正如sql标准不允许那样。有些数据库扩展sql以允许别名,但这是一个扩展。重复这个表达:
uplii1fm2#
除了kokosing和gordon linoff的答案之外,还可以使用数字来表示分组列名在
SELECT
声明。这种方法还可以为您提供更好的性能,如本aws博客第8节所述。例如:注:编号从1开始,而不是从零开始。
在这里
1
有点化名为account
. 最明显的缺点是,如果在SELECT
你也需要考虑到这一点GROUP BY
:ahy6op9u3#
这是因为sql是按一定顺序计算的,比如表扫描、过滤、聚合、投影、排序。您尝试使用投影的结果作为聚合的输入。在许多情况下,这是可能的(在投影是琐碎的情况下,就像您的案例),但这种行为并没有在ansisql中定义(presto和athena紧随其后)。
我们看到,在许多情况下,它是非常有用的,因此,对它的支持可能会在将来添加(扩展ansisql)。
目前,有几种方法可以克服这一问题:
或者
或者
或