我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中ONLY_FULL_GROUP_BY模式的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中ONLY_FULL_GROUP_BY模式的使用

引言:作为一个菜鸟,当写sql中涉及到group by这样简单的语句时,也会出现问题,我在牛客网上做sql题时,总报这个错:

MySQL中ONLY_FULL_GROUP_BY模式的使用

ONLY_FULL_GROUP_BY 到底是什么东西呢?

今天写篇文章解释一下。

一、GROUP BY使用时的关键要点

1. 理解 GROUP BY 的作用

GROUP BY 用于将数据集分割成多个组,每个组由一组具有相同属性的行组成。这使得聚合函数可以应用于每一组,而不是整个数据集。例如,使用 GROUP BY 可以按产品类别统计销售总额。

2. 遵守 ONLY_FULL_GROUP_BY 规则

在 mysql 中,如果启用了 ONLY_FULL_GROUP_BY 模式,那么 SELECT 子句中除聚合函数之外的所有列都必须在 GROUP BY 子句中出现。这是为了避免不确定性和潜在的数据歧义。

3. 使用 HAVING 进行条件过滤

HAVING 子句用于对分组后的结果进行过滤,类似于 WHERE 子句,但 HAVING 适用于聚合结果。例如,你可以使用 HAVING COUNT(*) > 1 来找出至少出现两次的组。

4. 正确排序结果

虽然 GROUP BY 自身不会自动排序结果,但你通常会希望在结果集中应用 ORDER BY 来排序分组。例如,你可以按销售额降序排序产品类别。

5. 注意空值和 NULL 值

在 GROUP BY 中,NULL 值会被视为相同的值,这意味着所有包含 NULL 的行会被归入同一组。如果需要区分 NULL 和非 NULL 值,可以使用 COALESCE() 或者条件表达式。

二、 ONLY_FULL_GROUP_BY 规则

1. 什么是 ONLY_FULL_GROUP_BY?

ONLY_FULL_GROUP_BY 是 MySQL 中的一个 SQL 模式,它要求在任何包含聚合函数的查询中,所有在 SELECT 子句中出现的非聚合列也必须在 GROUP BY 子句中出现。换句话说,如果一个查询使用了聚合函数,那么除了聚合函数包裹的列以外,所有在 SELECT 子句中出现的列都必须被 GROUP BY 子句引用。

这个规则确保了查询结果的确定性和一致性,避免了由于 SQL 语句的模糊性而导致的潜在错误。

2. 为什么需要 ONLY_FULL_GROUP_BY?

在 ONLY_FULL_GROUP_BY 被引入之前,MySQL 允许在没有 GROUP BY 或者 GROUP BY 不充分的情况下进行查询。这意味着,即使查询中包含了没有被聚合的列,MySQL 也会返回任意一个结果,这可能会导致误导性的结果或数据丢失。

例如,假设我们有以下查询:

SELECT prod_name, COUNT(order_num)
FROM products p
JOIN orders o ON p.prod_id = o.prod_id;

这里,prod_name 列没有被聚合函数包裹,也没有在 GROUP BY 子句中出现。在 ONLY_FULL_GROUP_BY 模式下,这个查询会失败,因为 MySQL 不知道如何从多个可能的 prod_name 值中选择一个来展示。

3.如何启用或禁用 ONLY_FULL_GROUP_BY?

在 MySQL 中,默认情况下 ONLY_FULL_GROUP_BY 是启用的。你可以通过检查 @@sql_mode 系统变量来确认这一点:

SELECT @@sql_mode;

如果 ONLY_FULL_GROUP_BY 已经被启用,并且你想要暂时禁用它(尽管这不是一个推荐的长期解决方案),你可以通过以下命令在会话级禁用它:

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

或者,你也可以在 MySQL 配置文件(my.cnf 或 my.ini)中修改 sql_mode 设置来全局禁用它。

总结

虽然禁用 ONLY_FULL_GROUP_BY 可能会方便一些查询的编写,但从长远来看,遵循这个规则对于保持数据查询的准确性和一致性至关重要。在编写 SQL 查询时,始终应确保遵循 ONLY_FULL_GROUP_BY 的指导原则,以避免潜在的数据解释错误。

到此这篇关于MySQL中ONLY_FULL_GROUP_BY模式的使用的文章就介绍到这了,更多相关MySQL ONLY_FULL_GROUP_BY 内容请搜索编程网(www.lsjlt.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.lsjlt.com)!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中ONLY_FULL_GROUP_BY模式的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL中ONLY_FULL_GROUP_BY模式的使用

目录一、GROUP BY使用时的关键要点1. 理解 GROUP BY 的作用2. 遵守 ONLY_FULL_GROUP_BY 规则3. 使用 HAVING 进行条件过滤4. 正确排序结果5. 注意空值和 NULL 值二、 ONLY_FULL
MySQL中ONLY_FULL_GROUP_BY模式的使用
2024-09-10

mysql:关闭sql_mode=ONLY_FULL_GROUP_BY模式

JAVA后台报错信息: Caused by: java.sql.SQLSyntaxErrorException: Expression #16 of SELECT list is not in GROUP BY clause and con
2023-08-17

如何禁用MySQL中的ONLY_FULL_GROUP_BY?

您可以在 MySQL 中启用 ONLY_FULL_GROUP_BY,如以下查询所示 -mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';Query OK, 0 rows affected (0.01 s
2023-10-22

MySQL中sql_mode模式的使用

目录前言介绍1. STRICT_ALL_TABLES2. STRICT_TRANS_TABLES 严格模式3. ALLOW_INVALID_DATES4. ANSI_QUOTES5. HIGH_NOT_PRECEDENCE6. IGNORE
MySQL中sql_mode模式的使用
2024-08-09

PHP设计模式中的命令模式怎么使用

这篇文章主要介绍“PHP设计模式中的命令模式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP设计模式中的命令模式怎么使用”文章能帮助大家解决问题。命令模式(Command Pattern
2023-07-05

mysql中mvvc模式的作用是什么

MVVC模式在MySQL中指的是Model-View-View-Controller模式,是一种用于开发web应用程序的软件设计模式。在这种模式中,Model代表数据层,View代表用户界面,Controller代表业务逻辑。MVVC模式
mysql中mvvc模式的作用是什么
2024-04-09

eclipse中的debug模式如何使用

要在Eclipse中使用调试模式,可以按照以下步骤进行操作:1. 打开Eclipse并导入您的项目。2. 在Eclipse的工具栏中选择“Run”(运行)或“Debug”(调试)。3. 在弹出的菜单中选择“Debug Configurati
2023-09-26

Python使用设计模式中的责任链模式与迭代器模式的示例

责任链模式 责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。#encoding=utf-8 # #by panda #职责连模式 def print
2022-06-04

spring中的设计模式怎么使用

在Spring中使用设计模式可以提高代码的可维护性、可扩展性和可测试性。以下是一些常见的设计模式在Spring中的使用方法:1. 单例模式(Singleton Pattern):Spring的默认作用域是单例模式,可以通过在Spring配置
2023-09-28

浅析JavaScript中严格模式的使用

在ECMAScript5标准中,JavaScript提出了严格模式的概念(StrictMode),本文就来和大家简单讲讲JavaScript中严格模式的具体使用,感兴趣的可以了解一下
2023-05-18

MySQL中INSERT+SELECT的使用方式

目录mysql中INSERT+SELECT的使用使用场景1.两表之间2.三表之间3.多表之间MySQL中SELECT INTO FROM的使用总结MySQL中INSERT+SELECT的使用使用场景通过一条sql语句实现从多个表中组合字
MySQL中INSERT+SELECT的使用方式
2024-10-24

PHP中如何使用模板方法模式?

模板方法模式定义了算法的骨架,具体步骤由子类实现,使子类可自定义具体步骤而无需改变整体结构。此模式用于:1. 定义算法的骨架。2. 将算法的具体行为延迟到子类。3. 允许子类自定义算法的某些步骤,而无需更改算法的总体结构。PHP 中的模板方
PHP中如何使用模板方法模式?
2024-05-21

eclipse中debug模式如何使用

在Eclipse中使用debug模式可以帮助开发者在程序运行时逐行调试代码,以便于查找和解决问题。以下是在Eclipse中使用debug模式的步骤:1. 打开Eclipse并导入你的Java项目。2. 在Eclipse的导航栏上选择"Deb
2023-10-19

Java中如何使用Observer模式

小编给大家分享一下Java中如何使用Observer模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java Q&A: 使用Observer模式A:我想在自己的
2023-06-03

编程热搜

目录