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

[码仔的后端日记]解决PostgreSQL分组聚合时SELECT中字段必须在group或聚合函数中的问题 然后用窗口函数去算我需要聚合的数据,这里直接写上关键字OVER放在avg(score)后面, 然后括号里跟上一个PARTITION BY name, 意思就是按照name去分组,把结果计算出来。其实有一种很简单的方法, 那就是你反正其他的字段其实都一样,随便取一个就行,所以还是保持原来的GROUP BY 子句,然后直接给 == 所有的字段全部加上一个 max() == 函数就行了。好,那我就直接给它安排一个 dictinct 函数,指定我 PARTITION BY 的那个字段,也就是name。 阅读详情

一、问题提出

当我以以往写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
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错 是MySQL的一个SQL模式(SQL_MODE)之一,它要求在使用GROUP BY语句时,SELECT列表、HAVING条件或ORDER BY列表中的每个列,要么是聚合函数的一部分(如COUNT()SUM()AVG()等),要么必须在GROUP BY子句中明确指定。这一模式的设计初衷是增强查询的准确性和可预测性,避免因为列的不明确引用而导致的数据错误或不一致。 阅读详情

相关推荐

MySQL查询列必须和group by字段一致吗?

目录 场景:查询各部门薪水最高的员工。 MySQL group by是如何决定哪一条数据留下的? 那么target list和group by column不匹配就一定不能执行吗? MySQL版本:8.0.27 场景:查询各部门薪水最高的员工。 CREATE TABLE `employee` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID', `dept` int NOT NULL COMMENT '部门', `user` var

qq3164069700的博客 1237

group by能够查询的字段

分组组名不仅仅是group by的字段,还可以是各种分组字段的标量函数,比如concat(),data_format(),什么都可以,但只能用分组后的字段。这样看应该比较明显,在group by筛选后,字段只有creator与total_premium了,因此select中只能携带这两个字段。只能是这三种的一个或者多个的组合,否则报错。(分组后的每组只会有一行数据,故只能对每组的数据由多到一的转变)准确说上面这段代码,重新根据执行顺序翻译一下应该如下。

qq_40772429的博客 2265

常见图像加密性能评价指标(详解加python实现)

前言 本文目的 介绍一些常见的用于图像加密的评价指标并予以代码实现,方便以后做实验时参考查阅。 图像加密领域所有常见的安全分析技术汇总如下图。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7N8tbKNx-1618308894314)(%E5%B8%B8%E8%A7%81%E5%9B%BE%E5%83%8F%E5%8A%A0%E5%AF%86%E6%80%A7%E8%83%BD%E8%AF%84%E4%BB%B7%E6%8C%87%E6%A0%87/1-s2.0-S0165

z2bns的博客 3万+

postgresql报错:必须出现在 GROUP BY 子句中或者在聚合函数中使用

报错信息:Cause: org.postgresql.util.PSQLException: 错误: 字段 "s.re_scan_dt" 必须出现在 GROUP BY 子句中或者在聚合函数中使用 以下是报错sql: select count(1) from t_task_his t left join t_scan_record_his s on t.ts_id = s.ts_id and t.ts_item_code = s.ts_item_code and...

qq3892997的博客 9218

Windows打印体系结构之Windows内置打印驱动程序

时间是一种很残酷的东西,它只会冲淡能够冲淡的,但也会洗尽铅华帮你留下该留下的。1.3.4、Windows内置打印驱动程序现在的Windows下的打印机驱动程序通常分为V4打印机驱动程序(V4 Printer Driver)、XPS打印机驱动程序(XPSDrv)、微软通用打印机驱动程序(Microsoft UniversalPrinter Driver)、微软PostScri...

weixin_34309435的博客 2254

Direct-LiNGAM算法理解

现在是大数据的时代,数据即是财富。那么如何从数据中发现因果关系呢?这是我们促进我们更加高效利用数据的一个问题?本文介绍了一种方法,可以在符合条件的观察数据中恢复出数据背后的因果结构,帮助我们更好理解数据的产生机制。

小小程序猿的博客 4592

人大金仓适配mysql和oracle函数适配

人大金仓适配mysql和oracle函数适配和迁移方案

aa473947751的博客 4897

博图Advanced实战:VB脚本实现HMI画面智能弹出(附完整代码解析)

本文详细介绍了在西门子博图Advanced平台中利用VB脚本实现HMI画面智能弹出的实战方法。通过动态计算坐标、分辨率自适应方案和完整代码解析,帮助工程师解决不同显示环境下的定位难题,提升工业自动化界面的交互体验。

weixin_29041767的博客 343

分组查询时,select的字段是否一定要都在group by中?

分组查询关键字group by通常和集合函数(MAX、MIN、COUNT、SUM、AVG)一起使用,它可以对一列或者多列结果集进行分组。例如要统计超市水果的种类,需要用count...

qq_24432315的博客 2万+

李沐之数值稳定性+模型初始化和激活函数

层记为t,这里的y不是预测,还包括了损失函数,y是优化函数,不是预测的结果y。第t层是输出。所有的h都是一些向量,向量关于向量的导数是一个矩阵,所以用了很多次的矩阵乘法,出问题就在这里。

m0_51133942的博客 1527

Python遥感图像处理指南(2)-卫星影像分析MNDWI提取

在第一篇文章中,我们使用了我们导入的软件包中已定义的函数,如 rasterio 中的 open 和 read 以及 matplotlib 中的 imshow。现在,我们可以编写自己的函数了。函数是一段代码,它接收一些参数作为输入并返回输出(经过一些计算),可以在代码中多次重复使用,也可以被其他代码重用。在 Python 中定义一个新函数非常简单。return v在此语法示例中,arg1和arg2强制参数,应该传递给函数,否则会引发错误,而arg3是一个可选参数,如果是,则假定默认值 1从函数调用中省略。

gis收藏家的博客 1576

MySQL不需要group by的字段查询,避免报错only_full_group_by的方法

对于不需要聚合的字段有没有办法查询出来呢比如很多人一上来就select * from XXX group by XX;或者加了聚合函数又想查多的字段基本上就会报错对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的遇到这个问题挺常见的,因为在 MySQL 5.7 版本中,,这也导致很多代码在本地跑得好好的,一上线就报错可以查询一下你的结果可能跟我不一样,比较长,但肯定包含了ONLY_FULL_GROUP_BY吧。

无知是恶 5155

2 中望CAD二次开发-绘制图形(ZRX C++)

本文讲解中望CAD二次开发,关于块的概念及基本图形的绘制

cilvsuanna的博客 411
上一篇: SQL中复杂结构体解析取值和对常用复杂函数的解释
下一篇: SpringBoot+Mybatis-Plus实现多数据源使
Senye_ing
博客等级 码龄8年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Senye_ing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值