首先注意,取每组最大的数据和取每组最大的一条记录是两个概念,前者很简单直接分组,max()即可。另外由于我的是5.7.24版本,5.7版本普遍存在一个问题,就是select的字段只能是group by后面出现的字段中的,不然报错,若想去掉这个限制Linux版的,可以参考https://blog.csdn.net/CSDN_ljm/article/details/83826879,Windows的自行查找解决办法。如果自己没有管理员的权限,无法修改,则用方法二多字段in查询解决

思路:因为默认group by分组后取得是组内第一条记录,那么我们就将记录按某字段倒序排序,这样再分组,就会取出第一条也是组内最大的那条。

方法一:

我首先通过连接拿到了想要的初始数据,我把这个表当做tmp。我想取surgery_part 组内score最大的那条记录

然后很自然的想到用select * from tmp order by score desc对其倒序排序

按照思路然后是把上面当做子查询即是select * from (select * from tmp order by score desc )group by surgery_part

理论上取上图每组第一行,那么就应该取到标红的6那一行,然后发现

不是最大的6!!!

查看资料发现原来排序后必须加limit ,如果不加的话,数据不会先进行排序。所以

select * from (select * from tmp order by score desc  limit 10000)group by surgery_part

好了,大功告成,另外再提供另外一种思路:子查询部分使用group by分组找到每组最大的,外层查询使用多字段的in查询。

方法二:

SELECT *
FROM tmp WHERE (surgery_part,score) in

(
SELECT surgery_part,max(score)
FROM tmp
GROUP BY surgery_part
)

这里顺便补充一道leetcode类似题目

https://leetcode-cn.com/problems/department-highest-salary/

/**部门工资最高的员工SQL架构Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int)Create table If Not Exists Department (Id int, Name varchar(255))Truncate table Employeeinsert into Employee (Id, Name, Salary, DepartmentId) values ('1', 'Joe', '70000', '1');insert into Employee (Id, Name, Salary, DepartmentId) values ('2', 'Henry', '80000', '2');insert into Employee (Id, Name, Salary, DepartmentId) values ('3', 'Sam', '60000', '2');insert into Employee (Id, Name, Salary, DepartmentId) values ('4', 'Max', '90000', '1');Truncate table Departmentinsert into Department (Id, Name) values ('1', 'IT');insert into Department (Id, Name) values ('2', 'Sales');Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。+----+-------+--------+--------------+| Id | Name  | Salary | DepartmentId |+----+-------+--------+--------------+| 1  | Joe   | 70000  | 1            || 2  | Henry | 80000  | 2            || 3  | Sam   | 60000  | 2            || 4  | Max   | 90000  | 1            |+----+-------+--------+--------------+Department 表包含公司所有部门的信息。+----+----------+| Id | Name     |+----+----------+| 1  | IT       || 2  | Sales    |+----+----------+编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。+------------+----------+--------+| Department | Employee | Salary |+------------+----------+--------+| IT         | Max      | 90000  || Sales      | Henry    | 80000  |+------------+----------+--------+链接:https://leetcode-cn.com/problems/department-highest-salary*/
这里我们无法控制LeetCode的解析,所以采用方法二
SELECT Department.`Name` AS Department,Employee.`Name` AS Employee,Salary
FROM Employee JOIN Department ON Employee.`DepartmentId` = Department.`Id`
WHERE (Salary,DepartmentId) IN
(SELECT MAX(Salary),DepartmentId
FROM Employee
GROUP BY DepartmentId)

MySQL5.7用group by分组根据组中某个字段的最大值求取那条记录(注意是整条记录)相关推荐

  1. mysql分组后组内排名_SQL实现group by 分组后组内排序

    在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记 ...

  2. Mysql 分组后组内排序按字段取最大或最小的数据

    我的个人博客:逐步前行STEP 示例: 1.将文章按类型的分组,并获取类型分组中最新的一篇文章 select author,max(`updated_at`) as updated_at from a ...

  3. LOOP GROUP BY 分组循环的使用方法小栗子

    1.格式: LOOP AT 内表 INTO DATA(工作区) GROUP BY ( 字段 = 工作区-字段size = GROUP SIZE "分组组数--index = GROUP IN ...

  4. SQL Server Always On可用性组中的数据同步

    This article describes the data synchronization process on SQL Server Always On Availability Groups ...

  5. mysql单列去重复group by分组取每组前几条记录加order by排序

    <div class="post"><h1 class="postTitle"><a id="cb_post_title ...

  6. 1.(group by)如何让group by分组后,每组中的所有数据都显示出来

    问题描述:表如下,如何让这个表按device_id这个字段分组,且组中的每条数据都查寻出来?(假如说这个表名为:devicedata) 错误答案:select * from devicedata GR ...

  7. 使用SQL语句中的Group by分组并计算每组的数量

    在SQL语句中,Group by一般用来做分组统计使用,在实际的开发中我们可能会遇到不仅需要分组,还需统计出每组的数量条数,那这时候可以结合count函数来一起使用即可完成此项操作,最后的结果展示出所 ...

  8. GROUP BY 分组后显示组内所有数据

    GROUP BY 分组后显示组内所有数据 数据表中需要根据某一个字段进行分组,但需要显示分组后组内的所有数据.两种方式: 1.数据表自己和自己进行连接查询,连接条件就是需要分组的字段,但这种方式查询出 ...

  9. mysql 组内分组_[MySQL] group by 分组并进行组内排序取得最新一条

    有一个需求是获取指定用户发送的最新的内容,这个时候需要使用group by分组功能 但是怎么获取最新的呢 ? 如果直接进行order by 是不能实现的,因为MysqL会先执行group by 后执行 ...

最新文章

  1. 使用 SCons 轻松建造程序
  2. LightBus新浪微博客户端开源下载
  3. (chap2 TCP/IP基础知识) TCP/IP协议分层模型-应用层
  4. halcon/c++接口基础 之 构造函数与Halcon算子
  5. 那些你不知道的 LVS 秘密!
  6. 【faster rcnn 实现via的自动框人】使用detectron2中faster rcnn 算法生成人的坐标,将坐标导入via(VGG Image Annotator)中,实现自动框选出人的区域
  7. python列表生成式和map效率_Python列表生成式12个小功能,你常用哪几个?
  8. yum安装Elasticsearch5.x
  9. 在Android studio环境下使用junit框架进行单元测试
  10. 面向过程编程和面向对象编程的区别
  11. 计算机二级ms高级应用考试内容,计算机二级《MSOffice》高级应用考试大纲
  12. vue 电视看板_基于Vue的拖放看板
  13. 计算机与网络安全系列书籍推荐
  14. 小米弹性调度平台Ocean
  15. 图像去模糊(维纳滤波)
  16. 计算机院校都看重保研er的哪些能力?
  17. office2021专业增强版,使用kms命令行激活
  18. 单反相机快门速度怎么设置
  19. 卡西欧科学计算机app,卡西欧CASIO计算器
  20. 用户查询车票c语言,车票管理系统c语言

热门文章

  1. vue+Echars移动端可视化页面
  2. 【科研技巧】Mac下使用SciDavis绘制科研论文图教程(安装及使用)
  3. vb修改计算机时间,如何在VB里进行日期格式转换
  4. USB鼠标卡顿解决办法
  5. 计算机网络智能小区综合分布线系统的总结,智能住宅小区综合布线系统的构建...
  6. 13 ,CSS 入门基础,行内排版内嵌式排版和外部排版样式
  7. java中反射机制的含义_java的反射是什么意思?
  8. nodejs和npm版本升级
  9. 建设工程项目质量成本优化与控制
  10. html5 三国杀,OL还更新HTML5吗?不更新不充值了