MySQL GROUP BY 行为

2024-01-29

给出下表'foo'

ID | First Name | Last Name
----------------------------
67   John        Smith
----------------------------
67   Bill        Jacobs

What first_name and last_name下面的查询会返回,为什么?

SELECT * FROM foo WHERE ID = 67 GROUP BY ID

MySQL 任意选择一行。在实践中,常用的 MySQL 存储引擎返回的值来自first组中的行,相对于物理存储。

create table foo (id serial primary key, category varchar(10));

insert into foo (category) values 
  ('foo'), ('foo'), ('foo'), ('bar'), ('bar'), ('bar');

select * from foo group by category;

+----+----------+
| id | category |
+----+----------+
|  4 | bar      |
|  1 | foo      |
+----+----------+

其他人是正确的,MySQL 允许您运行此查询,即使它具有任意且可能具有误导性的结果。 SQL 标准和大多数其他 RDBMS 供应商不允许这种不明确的 GROUP BY 查询。这被称为单值规则:选择列表中的所有列必须明确属于 GROUP BY 标准的一部分,或者位于聚合函数内,例如COUNT(), MAX(), etc.

MySQL支持SQL模式ONLY_FULL_GROUP_BY http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_only_full_group_by如果您尝试运行违反 SQL 标准语义的查询,MySQL 就会返回错误。

AFAIK,SQLite 是唯一一个允许在分组查询中使用不明确列的 RDBMS。 SQLite 返回值last组中的行:

select * from foo group by category;

6|bar
3|foo

我们可以想象这样的查询不会有歧义,但仍然违反 SQL 标准语义。

SELECT foo.*, parent_of_foo.* 
FROM foo JOIN parent_of_foo 
  ON (foo.parent_id = parent_of_foo.parent_id) 
GROUP BY foo_id;

这不可能产生模棱两可的结果。如果我们按 foo 的主键进行 GROUP BY,则 foo 中的每一行都会获得自己的组。因此 foo 中的任何列在该组中只能有一个值。如果组是由 foo 的主键定义的,则即使连接到 foo 中的外键引用的另一个表,每个组也只能有一个值。

MySQL 和 SQLite 相信您能够设计逻辑上明确的查询。形式上,选择列表中的每一列都必须是功能依赖GROUP BY 条件中的列的数量。如果你不遵守这一点,那就是你的错。 :-)

标准 SQL 更加严格并且不允许某些查询could是明确的——可能是因为它对于 RDBMS 来说太复杂而无法确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL GROUP BY 行为 的相关文章

  • Python Pandas:如何对组中的所有项目进行分组并为其分配 id?

    我有 df domain orgid csyunshu com 108299 dshu com 108299 bbbdshu com 108299 cwakwakmrg com 121303 ckonkatsunet com 121303
  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 包含列和行总计的 SQL 数据透视表

    我正在尝试将行和列总计添加到该数据透视表中 create table test4 city nvarchar 10 race nvarchar 30 sex nvarchar 10 age int insert into test4 val
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • 无法在 .net core 2 中从 MySQL 构建“日期”类型列

    我已经开始了一个新的 net core 2 项目 我正在尝试将 MySQL 数据库导入实体框架 我使用此命令来搭建数据库 Scaffold DbContext server localhost port 3306 user id user
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • oursql 中的参数化查询

    如果有人能告诉我是否可以使用命名占位符进行参数化查询 我将不胜感激oursql 一个用于与 MySQL 数据库交互的 python 模块 例如 我尝试了一种可以与 sqlite3 一起使用的查询 c execute select from
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • H2 SQL 日期比较

    在 H2 数据库中 如何在 TIMESTAMP 类型的列上运行查询 SELECT FROM RECORDS WHERE TRAN DATE lt 2012 07 24 Try 2012 07 24
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • MySQL - 多个结果集

    我正在使用 NET Connector 连接到 MySQL 在我的应用程序中 很少有线程使用相同的连接 因此如果 MySQLDataReader 尚未关闭并且某个线程正在尝试执行查询 则会出现该错误 已经有一个打开的 DataReader
  • SQL - 需要查找重复记录但排除反向事务

    我有一张交易表 偶尔会有 重复条目 如果 当管理员发现这些重复条目时 他们将撤销交易 从而创建负值 但由于监管要求 原始重复条目仍然保留 我想创建一个 SQL 查询 并使用 Crystal Reports 来制作报告 以便管理员轻松查找重复
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • 如何在 Entity Framework Core 中按周分组?

    在实体框架 6 中我可以使用SqlFunctions DatePart http msdn microsoft com en us library dd487171 aspx method var byWeek data GroupBy x
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • MySQL 左连接 WHERE table2.field = "X"

    我有以下表格 pages Field Type Null Key Default Extra page id int 11 NO PRI NULL auto increment type varchar 20 NO NULL

随机推荐

  • 仅当找到匹配字符串时才替换行的最后一个单词

    仅当找到匹配的字符串时 我才想替换该行的最后一个单词 输入文件 id 5918915 description Test Job NA revision 5 预期输出 id 5918915 description Test Job EU re
  • 当鼠标靠近时排斥物体

    我有一堆随机位置的 span 元素 包含在名为 background 的父 div 内 这些是用 Javascript 生成的 像这样 span class circle style width 54px height 54px backg
  • 将 React 组件从 Rails 引擎导入到应用程序中

    我在用反应在轨道上 https github com shakacode react on rails用于开发 Rails 引擎和应用程序 我写了一个 Rails 引擎 它只有一个组件 NewComponent 它使用react on ra
  • 浮点大于或小于零

    我有以下代码 有时返回 true 有时不返回 知道什么可能导致不同的结果吗 0 00 字符串来自 JSON 对象 代码简化 if new Float 0 00 gt 0 do something EDIT 我有一些浮点数 我想确定它是零 小
  • 尝试访问使用 CIFS 装载的远程文件夹在断开连接时挂起

    这个问题是一个扩展那个问题 https stackoverflow com questions 17929294 qdir hangs on accessing cifs remote folder when disconnected 再说
  • 如何在每个场景之前输出Cucumber后台步骤?

    通常 Cucumber 将输出后台步骤 使其看起来与您在功能文件中定义的相同 位于顶部 bundle exec cucumber color format pretty Feature Something Background Given
  • C# 获取 Windows 中每个显示器的 DPI 缩放比例

    我正在使用 WPF 应用程序中的代码 该应用程序需要计算 Windows 中每个显示器的 DPI 缩放大小 我能够计算出主屏幕的 DPI 但由于某种原因 我无法计算出如何获取其他显示器的比例 其他显示器都返回与主显示器相同的 DPI 有一些
  • 添加重试WebClient的所有请求

    我们有一个服务器来检索 OAUTH 令牌 并且 oauth 令牌通过 WebClient filter 方法添加到每个请求中 例如 webClient mutate filter request next gt tokenProvider
  • 验证 WCF Rest Web 服务

    我在 C 中创建了一个 Web 服务 REST Web 服务 无需任何身份验证 现在 我正在考虑向网络服务添加身份验证 Web服务公开了6个方法 都是GET 在这6个方法中 我想限制 Admin 组成员对2个方法的访问 目前 我的 Web
  • SQLAlchemy外键找不到表

    当我尝试实例化时出现此错误ConsumerAdvice class Foreign key associated with column tbConsumerAdvice ConsumerAdviceCategory ID could no
  • 有没有办法将 EditText/输入字段放入主屏幕小部件中?

    我希望我的用户在主屏幕上输入一些内容 但是每次我向小部件添加 Edittext 时 它都会中断 我做了一些谷歌搜索发现它们显然在小部件中不受支持 不过 每部 Android 手机上都有一个带有输入字段的 Google 搜索小部件 所以我想知
  • React-navigation-hooks:如何测试 useFocusEffect

    据我了解 应该这样做 以便 useFocusEffect 可以作为 useEffect 进行测试 模拟 我使用 useFocusEffect 来获取数据 useFocusEffect useCallback gt fetchData fet
  • 如何从gitlab中完全删除提交?

    我在 git 存储库中进行了提交并推送了它 但意外地它包含了我们生产机器的一些密码 所以我删除了提交 git reset hard HEAD 1 git push force 这确实从提交列表中删除了该提交 但 gitlab 上提交的 ur
  • 具有不同类型中断的状态循环

    我正在尝试将以下有状态命令式代码转换为 Haskell while true while get if put1 failImmediately if put2 succeedImmediately 这俩put1 and put2读取系统的
  • Java 泛型类型转换难题

    我正在尝试使用 Google 的 Guava ImmutableSet 类来创建一组具有类似时间属性的不可变类 java util Date 和 org joda time DateTime private static final Imm
  • 如何从 GDAX websocket feed 获取实时出价/要价/价格

    API 文档不鼓励轮询 ticker端点 建议使用websocket流来监听匹配消息 但匹配响应只提供了一个price and a side 卖买 如何从 websocket feed 重新创建股票行情数据 价格 卖价和出价 price 3
  • ffmpeg:如何在视频末尾添加帧或黑色?

    如何复制任何视频末尾最后一帧的任意数量的重复项 或者 如何在任何视频的末尾添加黑帧 这可以通过脚本和 ffmpeg 来完成吗 当然 只要操作可编写脚本 任何其他工具都可以 困难在于应该支持所有视频格式 或者至少尽可能广泛的视频格式 该脚本应
  • 在没有代理设置的情况下在 VSTS 中运行 nuget 任务

    所以我认为我想要的是这篇文章的反面 VSTS NuGet 恢复失败 代理 https stackoverflow com questions 45369334 vsts nuget restore fails proxy 我们有一台本地计算
  • 在Windows中设置JAVA_HOME?

    应该在哪里JAVA HOME指向 JDK 还是 JRE 我在几个网站上看到过 它设置为 JRE 而在其他情况下则设置为 JDK 它是否以任何方式依赖于 Java 版本 JDK代表Java开发工具包 而JRE代表Java运行时环境 JAVA
  • MySQL GROUP BY 行为

    给出下表 foo ID First Name Last Name 67 John Smith 67 Bill Jacobs What first name and last name下面的查询会返回 为什么 SELECT FROM foo