为什么严格意义上一定要把查询的字段写在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

类银河恶魔城游戏开发学习笔记(0)

解决B站搬运【Unity教程】从0编程制作类银河恶魔城游戏P37中moveState和idleState循环切换的问题

Gellar的博客 1448

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

HSMS/SECS/GEM/GEM300半导体通讯协议介绍

HSMS/SECS/GEM/GEM300半导体通讯协议解决方案介绍 目录 SECS/GEM协议通讯 1 目录 2 1.介绍 3 1.1 产品概述 3 1.1.1 高扩展性 4 1.2 通讯实现 4 1.2.2多主机实现 4 1.3 当前的SEMI标准 5 1.3.1 功能跟友商对比 6 1.4 软件灵活性 7 1.5 无需学习SECS 7 1.6 自定义消息传递 8 1.7 记录收集 8 1.8 SECS Manual文档 8 1.9 产品清单 8 2 产品结构 9 2.1 控制面板 9 2.2 使用环境

semisecs 16万+

软件缺陷(定义+表现形式+优先级+信息+产生原因),看完这篇文章就懂了

软件缺陷软件缺陷的定义软件缺陷的表现形式软件缺陷产生的原因软件缺陷的根源软件缺陷的费用软件缺陷的信息 软件缺陷的定义 IEEE 1983 of IEEE Stardard 729中软件缺陷做了一个标准的定义: 从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。 因此软件缺陷就是软件产品中所存在的问题,最终表现为用户所需要的功能没有完全实现,没有满足用户的需求。 缺陷不是bug,缺陷包含bug,缺陷的范围更大。 软件缺陷

qq_40676418的博客 1万+

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

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

aa473947751的博客 4897

基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验

本文详细介绍了基于Matlab-Simulink的大林算法控制系统设计与振铃消除实验。通过分析纯滞后系统的控制难题,探讨大林算法在工业控制中的应用优势,并提供Matlab-Simulink环境搭建、控制器D(z)设计、振铃消除及仿真实验的完整流程。文章还对比了大林算法与PID控制的性能差异,为工程实践提供参考。

dropout6artist的博客 796

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

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

qq_24432315的博客 2万+

【异常】Nacos 2.x 核心报错:Server check fail (gRPC 端口连不通) 深度排查

如果 Nacos 运行在 K8s 中,需确保对应的Servicemetadata:spec:ports:port: 8848port: 9848 # 必须暴露此端口selector:app: nacos在 Nacos 2.x 时代,“端口成套出现”是基础设施配置的基本要求。遇到连接失败时,首要检查的不是业务配置,而是网络链路上主端口 + 1000的 TCP 通讯是否被放行。更多关于 AI + 教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 325

LLaMA Factory添加新模型template的实战解析

本文主要介绍了LLaMA Factory添加新模型template的实战解析,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 实战解析 2.1 检查代码 2.2 修改代码

herosunly的博客 19万+

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

【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)

OpenSSL 是一个开源的软件库,它提供了一系列加密工具和协议,主要用于实现安全通信,如在网络上的数据传输。它支持多种加密算法,包括对称加密、非对称加密、散列函数、伪随机数生成器、数字签名、密钥交换以及证书管理等。

嵌入式技术开发 4161
上一篇: 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、付费专栏及课程。

余额充值