计数(大小写时)redshift sql - 接收groupby错误

问题描述 投票:0回答:2

我正在尝试在Amazon Redshift中进行计数(大小写)。

使用这个reference,我写道:

select
sfdc_account_key,
record_type_name,
vplus_stage,
vplus_stage_entered_date,
site_delivered_date,

case when vplus_stage = 'Lost' then -1 else 0 end as stage_lost_yn,
case when vplus_stage = 'Lost' then 2000 else 0 end as stage_lost_revenue,
case when vplus_stage = 'Lost' then datediff(month,vplus_stage_entered_date,CURRENT_DATE) else 0 end as stage_lost_months_since,
count(case when vplus_stage = 'Lost' then 1 else 0 end) as stage_lost_count


from shared.vplus_enrollment_dim
where record_type_name = 'APM Website';

但是我收到了这个错误:

[42803][500310] [Amazon](500310) Invalid operation: column "vplus_enrollment_dim.sfdc_account_key" must appear in the GROUP BY clause or be used in an aggregate function; java.lang.RuntimeException: com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: column "vplus_enrollment_dim.sfdc_account_key" must appear in the GROUP BY clause or be used in an aggregate function;

在添加计数之前,查询运行正常。我不确定我在这里做错了什么 - 谢谢!

case amazon-redshift
2个回答
0
投票

没有group by,你不能有一个聚合函数(总和,计数等)

语法是这样的

select a, count(*)
  from table
 group by a (or group by 1 in Redshift)

在您的查询中,您需要添加

group by 1,2,3,4,5,6,7,8

因为除了count之外你有8列

由于我不知道你的数据和用例我不能告诉你它会给你正确的结果,但SQL在语法上是正确的。


0
投票

基本规则是:

  • 如果您正在使用聚合函数(例如COUNT(...)),那么您必须提供GROUP BY子句来定义分组
  • 例外:如果所有列都是聚合(例如SELECT COUNT(*), AVG(sales) FROM table
  • 任何非聚合函数的列都必须出现在GROUP BY中(例如SELECT year, month, AVG(sales) FROM table GROUP BY year, month

您的查询具有与非聚合值混合的COUNT()聚合函数,这会导致错误。

在查看您的查询时,您可能不希望对所有列进行分组(例如,stage_lost_revenuestage_lost_months_since看起来不像分组列)。您可能希望模拟查询结果以找出您真正想从这样的查询中获得的内容。

© www.soinside.com 2019 - 2024. All rights reserved.