如何将此sql从SAS转换为Athena?

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

下面的 sql 在 sas 中有效,但在 AWS Athena 中无效。 我收到“EXPRESSION_NOT_AGGREGATE”错误消息。

我不想在结果中返回任何聚合表达式。 我该怎么办?

SELECT DISTINCT 
    VAR_A
    ,VAR_B
    ,VAR_C
FROM data_org
WHERE VAR_D in ('3', '8')
GROUP BY VAR_A
HAVING VAR_E = MAX(VAR_E)
sql amazon-athena
2个回答
0
投票

一般来说,所有非聚合列都必须是

group by
子句的一部分。您不会(也不想)聚合任何内容,因此请删除该子句(以及
having
)并切换到
where

select distinct var_a, var_b, var_c
from data_org
where var_d in ('3', '8')
  and var_e = (select max(var_e) 
               from data_org);

0
投票

它可能在 sas 中工作,但如果要分组,普通 SQL 需要在查询的选择部分中使用一些聚合函数(MAX、MIN、AVG、SUM 等),并且任何不是聚合的内容都需要进行分组。

因此,您需要将一些聚合添加到 SELECT 部分,并确保 GROUP BY 包含不使用聚合的列:

SELECT DISTINCT 
    VAR_A
    ,VAR_B
    ,VAR_C
    ,MAX(VAR_F) --or something else
FROM data_org
WHERE VAR_D in ('3', '8')
GROUP BY VAR_A, VAR_B, VAR_C --include everything not having Aggregate function
HAVING VAR_E = MAX(VAR_E)
© www.soinside.com 2019 - 2024. All rights reserved.