一、问题提出
当我以以往写SQL语句的思路在AWS Athena写时,提示以下错误信息:

意思就是要求把查询的字段写到GROUP BY字句中。
二、原因
| version | events |
|---|---|
| 1.0 | eat |
| 1.0 | drink |
| 1.0 | sit |
假设你想去重version,但此时,如表中version 1.0有三个,对应的events值都不同。那它该保留哪一个呢?
所以严格意义上来说,会要求把events也写到GROUP BY中,这样三个都会被保留下来,就不存在模糊性数据缺失了。
其它字段也是如此,如:
| version | events | params |
|---|---|---|
| 1.0 | eat | 100 |
| 1.0 | eat | 200 |
| 1.0 | sit | 100 |
| 1.0 | drink | 100 |
同理,1.0-eat对应两个不同的params,如果不把params写到GROUP BY,那就不知道该保留哪一个。
但非严格意义,比如MySQL。就默认只保留第一行数据。
如上表查询语句:
select * from table group by version;
结果:
| version | events | params |
|---|---|---|
| 1.0 | eat | 100 |
文章讨论了在AWSAthena中使用SQL查询时遇到的问题,系统要求将所有非聚合字段包含在GROUPBY子句中以避免数据模糊性。这与MySQL的处理方式不同,后者在没有指定GROUPBY时默认保留第一行数据。文章强调了在Athena中明确指定GROUPBY字段的重要性,特别是当需要去重或者处理多个值时。

被折叠的 条评论
为什么被折叠?



