为什么严格意义上一定要把查询的字段写在GROUP BY子句中。

文章讨论了在AWSAthena中使用SQL查询时遇到的问题,系统要求将所有非聚合字段包含在GROUPBY子句中以避免数据模糊性。这与MySQL的处理方式不同,后者在没有指定GROUPBY时默认保留第一行数据。文章强调了在Athena中明确指定GROUPBY字段的重要性,特别是当需要去重或者处理多个值时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题提出

当我以以往写SQL语句的思路在AWS Athena写时,提示以下错误信息:
在这里插入图片描述
意思就是要求把查询的字段写到GROUP BY字句中。

二、原因

versionevents
1.0eat
1.0drink
1.0sit

假设你想去重version,但此时,如表中version 1.0有三个,对应的events值都不同。那它该保留哪一个呢?

所以严格意义上来说,会要求把events也写到GROUP BY中,这样三个都会被保留下来,就不存在模糊性数据缺失了。

其它字段也是如此,如:

versioneventsparams
1.0eat100
1.0eat200
1.0sit100
1.0drink100

同理,1.0-eat对应两个不同的params,如果不把params写到GROUP BY,那就不知道该保留哪一个。

但非严格意义,比如MySQL。就默认只保留第一行数据。
如上表查询语句:

select * from table group by version;

结果:

versioneventsparams
1.0eat100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Senye_ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值