SYNTAX_ERROR:'“ xyz”'必须是一个聚合表达式或出现在GROUP BY子句中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SYNTAX_ERROR:'“ xyz”'必须是一个聚合表达式或出现在GROUP BY子句中相关的知识,希望对你有一定的参考价值。

我有两个表main_table和staging_table,main_table包含原始数据,而staging_table包含一些我必须与main_table数据一起添加的更新记录,为此,我使用的是唯一ID-PersonID和到达时间-date下面是我可以执行到SQL中的查询

SELECT PersonID, LastName, FirstName, Address, City, max(date) 
from 
(
select PersonID, LastName, FirstName, Address, City, date from main_table
UNION
select PersonID, LastName, FirstName, Address, City, date from staging_table
) as t
GROUP by t.PersonID;

但是在执行到AWS Athena时,出现以下错误,SYNTAX_ERROR:'“ LastName”'必须为聚合表达式或出现在GROUP BY子句中

答案

我怀疑其他列可能会有所不同,您实际上想要的是最近日期的完整记录。在这种情况下,请使用row_number()

select p.*
from (select p.*,
             row_number() over (partition by personid order by date desc) as seqnum
      from ((select PersonID, LastName, FirstName, Address, City, date
             from main_table
            ) union all
            (select PersonID, LastName, FirstName, Address, City, date
             from staging_table
            )
           ) p
     ) p
where seqnum = 1;

PersonId选择具有最新日期的一行。列来自最新行。

另一答案

您必须这样分组:

SELECT PersonID, LastName, FirstName, Address, City, max(date) 
from 
(
select PersonID, LastName, FirstName, Address, City, date from main_table
UNION
select PersonID, LastName, FirstName, Address, City, date from staging_table
) as t
GROUP by PersonID, LastName, FirstName, Address, City;

select子句中不属于聚合函数的每一列都必须位于order by子句中。

或者您可以这样做:

SELECT PersonID, max(LastName), max(FirstName), max(Address), max(City), max(date) 
from 
(
select PersonID, LastName, FirstName, Address, City, date from main_table
UNION
select PersonID, LastName, FirstName, Address, City, date from staging_table
) as t
GROUP by PersonID, LastName, FirstName, Address, City;

而且还有很多其他方式可以根据您需要的结果来编写代码。这个答案是对您的问题的答案:

SYNTAX_ERROR:'“ xyz”'必须是聚合表达式或出现在GROUP BY子句

以上是关于SYNTAX_ERROR:'“ xyz”'必须是一个聚合表达式或出现在GROUP BY子句中的主要内容,如果未能解决你的问题,请参考以下文章

警告:内置函数'xyz'的隐式声明不兼容

已知s='(XYZ)+',t='(X+Z)*Y',利用联接,求子串和转换等基本运算,将s转化为t

git的使用方法,如何配置

何时类型不是类型?错误:'是一种类型,在给定的上下文中无效'

有2个乒乓球对进行比赛,每队各出3个人 甲队为ABC乙队为XYZ 抽签决定比赛名单,A不跟X比 C不跟X、Z比 编程

Openlayers API-XYZ