首页 > 数据库 >SQL 中 select 和 group by 中数据的相互约束关系

SQL 中 select 和 group by 中数据的相互约束关系

时间:2023-08-08 14:23:59浏览次数:25  
标签:FULL GROUP SQL mode sql group select

前提

本文的前提是 mysql 的sql_mode中含有 ONLY_FULL_GROUP_BY 。如果不含有 ONLY_FULL_GROUP_BY,那么就没有本文后续说的限制。

可以使用下面这条sql查看。

SHOW VARIABLES LIKE 'sql_mode';

-- 输出
sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

结论

在有group by操作中,select后面接的结果集字段只能出现以下两种:

  • group by后出现的字段
  • 聚合函数。如 count(), avg(), sum(), max(), min()等

原因

比如一个表中 有 姓名,性别,年龄

group by 性别,这时候就是把男和女 分成两个组

要搜索的数据只能是基于这两个组,比如avg(年龄),基于分组以后的年龄求平均,但不能查看name,这样就一个性别里面有好几个名字,就有问题了。

所以select后面的数据要么是groupby里面出现的内容,要么是对数据表里的数据求聚合。

否则会报以下错误:

SQL_ERROR_INFO: "Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'titles.emp_no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"

标签:FULL,GROUP,SQL,mode,sql,group,select
From: https://www.cnblogs.com/FengZeng666/p/17614036.html

相关文章

  • 在langchain中使用自定义example selector
    简介在之前的文章中,我们提到了可以在跟大模型交互的时候,给大模型提供一些具体的例子内容,方便大模型从这些内容中获取想要的答案。这种方便的机制在langchain中叫做FewShotPromptTemplate。如果例子内容少的话,其实无所谓,我们可以把所有的例子都发送给大语言模型进行处理。但是如......
  • 在langchain中使用自定义example selector
    简介在之前的文章中,我们提到了可以在跟大模型交互的时候,给大模型提供一些具体的例子内容,方便大模型从这些内容中获取想要的答案。这种方便的机制在langchain中叫做FewShotPromptTemplate。如果例子内容少的话,其实无所谓,我们可以把所有的例子都发送给大语言模型进行处理。但是如......
  • Mysql 备份
    @echooffecho设置MySql数据库的连接信息sethost=127.0.0.1setport=3306setuser=rootsetpass=Mysql@Zhengshiecho设置要备份MySql数据库名称setdbname=crmecho获取当天的日期格式,例如:2022-12-13-14-30-40setbackup_date=%date:~0,4%-%date:~5,2%-%date:~8,2%-%......
  • MySQL索引
    MySQL的索引是一种数据结构,它可以帮助数据库系统更高效地获取数据。以下是MySQL索引的一些主要特性和使用方法:索引类型:MySQL支持多种类型的索引,包括B-Tree索引、哈希索引、全文索引、空间索引等。其中,B-Tree索引是最常用的索引类型。创建索引:你可以在创建表的时候创建索引,也可......
  • SQL中CONVERT函数格式:CONVERT(data_type,expression[,style])
    sqlserverconvert()函数的使用方法_convertsqlserver_qq_37528515的博客-CSDN博客SQL中CONVERT函数格式:CONVERT(data_type,expression[,style])说明:data_type:目标系统所提供的数据类型,如果转换时没有指定数据类型的长度,则SQLServer自动提供长度为30。expression:是任......
  • 导出mysql查询结果到文件中
    1、https://blog.csdn.net/sqL520lT/article/details/121688510[Linux导出sql]Linux上面导出mysql查询结果前言:仔细看最后一步操作 肯定可以的登录服务器mysql以后先查看他的这个路径  :存储sql文件的路径   mysql>showvariableslike'%secure_file_priv%';......
  • MySQL 索引结构浅析
    索引结构InnoDBB树上面是二叉树和红黑树的结构,其实红黑树是一个自平衡二叉查找树,可以用于解决二叉树顺序插入时形成一个有序链表问题。但是两者都有一个明显缺点,就是当数据量过大时,层级较深,检索速度慢。下面分析一下B树(多路平衡查找树)名词解析:度数:指的是一个节点的子......
  • NineData|如何快速完成MySQL数据的差异对比?
    在现代商业环境中,数据库是企业存储核心数据的重要工具,而MySQL作为最受欢迎的关系型数据库管理系统,广泛应用于各行各业。在容灾、数据迁移、备份恢复等场景下,为了确保两端或多端之间数据的一致性,通常需要对数据进行一致性对比。而数据对比的传统做法 “人工抽检” 通常需要进......
  • MySQL
    一、优化定位分析索引聚簇索引优化二、其他面试题事务主从同步分库分表......
  • 数据仓库(十二)---分布式SQL查询引擎---teradata版本的presto安装和使用
    我们在使用presto过程中,发现facebook原版和京东原版都是解压可用,teradata版本的安装要麻烦一些。下面对teradata版本的安装过程进行记录。首要条件1、需要python2.6或者python2.7环境之所以需要python环境是因为teradata版本的presto把安装封装成了集群式安装。根据配置在安装过......