sql - AWS Redshift 列“view_table_B.cost”必须出现在 GROUP BY 子句中或在聚合函数中使用
问题描述
我在 AWS Redshift 中有 2 个查询,这些查询针对具有相似架构的不同表。但我的问题是其中一个查询正在工作,而另一个查询失败。
第一次查询
SELECT view_table_A.accountId, view_table_A.date, SUM(view_table_A.cost) as Cost
FROM view_table_A
GROUP BY accountId, date
HAVING Cost >= '20'
第二次查询
SELECT view_table_B.projectname, view_table_B.usagedate, sum(view_table_B.cost) as Cost
FROM view_table_B
GROUP BY projectname, usagedate
HAVING Cost >= '20'
我的问题是第一个查询运行良好,而第二个查询将返回如下错误
亚马逊无效操作:列“view_table_B.cost”必须出现在 GROUP BY 子句中或在聚合函数中使用;
Update-1 我尝试从查询中删除 ' 但仍然得到相同的结果。我附上了我尝试在 redshift 中执行的查询的屏幕截图。
解决方案
Redshift 标识符不区分大小写,因此会在您的查询cost
中Cost
发生冲突。
我能够通过以下方式重现该问题:
with src(cost, dat) as (
select 1, current_date
union all
select 2, current_date
)
SELECT
dat,
sum(s.cost) as Cost
FROM src s
GROUP BY dat
HAVING Cost = 3
;
它给了我
[2020-06-04 11:22:44] [42803][500310] Amazon 无效操作:列“s.cost”必须出现在 GROUP BY 子句中或用于聚合函数中;
如果您将列重命名为不同的内容,则可以修复查询:
with src(cost, dat) as (
select 1, current_date
union all
select 2, current_date
)
SELECT
dat,
sum(s.cost) as sum_cost
FROM src s
GROUP BY dat
HAVING sum_cost = 3
;
我也很惊讶地看到引用标识符"
并不能解决问题——正如我最初预期的那样。