SQL排序不遵循group by语句,总是使用主键

2023-12-11

我有一个 SQL 数据库,其中有一个名为staff,具有以下列:

workerID (Prim.key), name, department, salary

我应该找到每个部门工资最高的工人,并使用以下语句:

select staff.workerID, staff.name, staff.department, max(staff.salary) AS biggest
from staff
group by staff.department

我从每个部门显示一名工人,但他们不是工资最高的工人,而是显示最大的工资值,即使工人没有得到该工资。

显示的人员是每个部门具有“最低”workerID 的工人。

因此,即使在 group by 语句中没有提及,也会使用主键进行一些排序。

有人可以解释一下发生了什么以及如何正确排序。


对发生的事情的解释:

你正在执行一个GROUP BY on staff.department,但是你的SELECT列表包含 2 个非分组列staff.workerID, staff.name。在标准 sql 中,这是一个语法错误,但是 MySql 允许这样做,因此查询编写者必须确保他们自己处理这种情况。

参考:http://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html

在标准 SQL 中,包含 GROUP BY 子句的查询无法引用选择列表中未在 GROUP BY 子句中命名的非聚合列。

MySQL 扩展了 GROUP BY 的使用,以便选择列表可以引用未在 GROUP BY 子句中命名的非聚合列。

服务器可以自由地从每个组中选择任何值,因此除非它们相同,否则所选择的值是不确定的。

从 MySQL 5.1 开始,可以通过在 sql_mode 中设置 ONLY_FULL_GROUP_BY 标志来禁用非标准功能:http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_only_full_group_by

怎么修:

select staff.workerID, staff.name, staff.department, staff.salary
from staff
join (
  select staff.department, max(staff.salary) AS biggest
  from staff
  group by staff.department
) t
on t.department = staff.department and t.biggest = staff.salary

在内部查询中,使用 GROUP BY 获取部门及其最高工资。然后在外部查询中将这些结果与主表连接起来,这将为您提供所需的结果。

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

SQL排序不遵循group by语句,总是使用主键 的相关文章

随机推荐

  • 如何以编程方式从 .NET 中注册类型库(设置正确的路径)?

    使用 NET 4 0 我制作了一个支持COM的DLL 我们称之为example dll 并且我已经注册它并使用regasm exe生成了相应的类型库 regasm exe tlb codebase example dll 该类型库称为 ex
  • 如何停止我的服务?

    另请参阅编辑 2 如下 我已经延长了NotificationListenerService并实现了它的几种方法 包括onDestroy 方法 但不是onBind or onStartCommand 方法 因为据我所知 我不需要它们 然而当我
  • Corba ORBD 错误

    我正在使用 CORBA 开发一个简单的远程管理工具 这是我的服务器代码 To change this template choose Tools Templates and open the template in the editor p
  • 按索引将 tr 移动到新位置

    我有一个具有固定行布局的表 每行都有唯一的标识符 当数据从数据库返回时 该表中的行具有不同的顺序 返回的数据具有与固定布局中存在的相同索引 因此我可以在固定表中找到匹配的行 我需要移动固定表布局中的行以匹配数据中的行顺序 表格布局 tabl
  • 如何使用cmake创建共享库?

    我写了一个库 以前是用自己写的Makefile编译的 但现在想改用cmake 树看起来像这样 我删除了所有不相关的文件 include animation h buffers h vertex h world h src animation
  • Plotly Facets 无法正确翻译

    我发现 使用 R 的 Plotly 当我分面绘图时 它们通常无法正确地从 R 转换为 Plotly 例如 我在 R 中绘制的图表如下所示 当我将它发送到plotly时 它看起来像这样 出于保密原因 一些数据在两个图中均被隐藏 我的代码看起来
  • 如何将MAC地址转换为对应的IP地址?

    我正在寻找一种简单的方法将 MAC 地址转换为本地网络中相应的 IP 地址 就我而言 只有两个设备 一台非常普通的 PC 192 168 0 1 和一台在 ROM 中硬编码了任意 IP 地址 192 168 0 xxx 的科学仪器 PC 和
  • UIImageView .scaleAspectFit 和自动布局无法从 Swift 以编程方式工作

    我有几个部分透明的 PNG 叠加层 可以在视图中相互叠加显示 覆盖的数量根据运行时条件而变化 我想创建UIImageViewSwift 中的实例并将它们添加到视图中 添加时我没有任何问题得到我想要的行为UIImageView在故事板中并通过
  • Python 相当于 JavaScript 函数对象

    我想知道是否有Python相当于这个JavaScript构造 var myFunctions greet function name return Hello name farewell function time return See y
  • SHA1 C# 相当于此 Java

    在 C 中寻找与此方法相同的等效项 try MessageDigest md MessageDigest getInstance SHA 1 md update password getBytes BigInteger hash new B
  • 非英文字符在我的 php 页面上显示为问号 - 在数据库中显示正常

    我有一个 MySQL 数据库表 其中填充了非英语数据 当我在 Navicat MySQL 浏览器中查看数据时 数据显示正常 但是 当我运行 php 脚本来选择并在网页上显示数据时 它会显示问号 页面编码设置为 utf8 甚至 MySQL 排
  • 如何在Matlab中进行GF(2)的逆运算和GF(256)的乘法?

    我有一个二进制矩阵A only 1 and 0 和一个向量D在伽罗瓦域 256 向量C计算如下 C A 1 D where A 1表示矩阵的逆矩阵A in GF 2 是乘法运算 结果向量C必须在GF 256 我尝试用Matlab来做 A 1
  • Windows 身份验证的 asp.net mvc 应用程序中每个资源(2 x 401.2 和 1 x 200)有 3 个请求

    当我拉出 Fiddler 并意识到每个请求都被发送了 3 次 两次我得到 401 2 然后成功 时 我试图找出为什么我的网站在 IE9 中如此缓慢 我验证了这种情况在所有浏览器上都会发生 只是 Chrome 的速度掩盖了这一点 或者这可能与
  • 递归斐波那契函数(带负数)

    我可以为所有大于 0 的数字编写递归斐波那契函数 但该函数对于任何负数都是完全错误的 知道如何在 C 中实现这个吗 int fibonacci int n if n 0 return 0 if n 1 return 1 return fib
  • Vagrant 端口转发不起作用

    我已经在我的电脑上安装了 CouchDBvagrant 0 9 0正在运行的盒子CentOS 6 2 In 流浪文件我已经添加config vm forward port 5984 5985 重新加载流浪汉后 我尝试卷曲地址 curl v
  • 如何在C++中将较大的字符串减少为较小的字符串?可能是通过散列?

    我想在 C 中将较大的字符串压缩为较小的字符串 在 C 中执行此操作有哪些不同的方法 要求是输出也应该是字符串 好吧 如果您以后不需要解压缩它 string s xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx s E
  • 在 geom_密度_脊上画线

    我试图在 ggridges 的密度图中画一条线 library ggplot2 library ggridges ggplot iris aes x Sepal Length y Species geom density ridges re
  • 将 Excel 中的值除以一组预设值,以找出每个值需要多少个

    我很好奇是否有办法让我的生活更轻松 在 Excel 中 我生成一个总值 例如 750 并且需要从 50 100 200 250 500 的值中找出我需要多少个管道订单 无论如何 有没有办法让excel取一个值 然后返回我需要的每个数字的数量
  • 如何更改绘图标题和轴标签的字体大小并保存?

    每次我将绘图图片保存为 jpg 或 png 时 标题和轴标签的字体大小都会自动更改回默认值 我的代码是这样的 figure plot x f x title the smallest n 1 FontSize 24 xlabel x Fon
  • SQL排序不遵循group by语句,总是使用主键

    我有一个 SQL 数据库 其中有一个名为staff 具有以下列 workerID Prim key name department salary 我应该找到每个部门工资最高的工人 并使用以下语句 select staff workerID