MySQL - 检索具有最大值的记录

标签 mysql sql

<分区>

我的 MySQL 数据库中有如下表:

employee
-------------------------
id    name    num
1     Jack    1
2     John    1
3     Jack    2
4     Steve   1
5     Jack    3
6     Steve   2
7     Carol   1

我想做的是检索具有最高“num”值的名称。

例如:

5     Jack    3

有多个名为 Jack 的记录,但我想获得具有最大“num”值的记录。

我尝试使用下面的查询:

SELECT MAX(num),id,name FROM `employee`

但它返回第一条记录的id 和名称(第一个“Jack”),但返回最新记录的数量。

MAX(num)    id     num
-----------------------
3           1      Jack 

当然我可以尝试使用“Order by”,但我也想检索具有最高值的唯一记录。

SELECT num,id,name FROM `employee` order by num desc

此查询还将返回所有记录,包括较小的记录。

id    name    num
-------------------------
3     5       Jack
2     3       Jack
2     6       Steve
1     1       Jack
1     2       John
1     4       Steve
1     7       Carol

当我尝试按名称分组时,它返回按名称分组的记录,但同样只返回小记录。

下面的两个查询给出相同的结果:

SELECT num,id,name FROM `employee` group by name order by num desc 


SELECT * FROM
(
select * from `employee` order by num desc
) as employee_tmp
group by name
order by num desc

同样,它只对第一个和最小的记录进行分组。

id  name    num
1   Jack    1
2   John    1
4   Steve   1
7   Carol   1

最佳答案

只需将 LIMIT 1 子句添加到您的查询中即可

SELECT num,id,name FROM `employee` order by num desc LIMIT 1

编辑:
好的,我误解了你原来的问题。下面列出了具有最高 num 值的每个名称:

SELECT a.* FROM employee a 
INNER JOIN (
  SELECT name na, MAX(num) nu FROM employee 
  GROUP BY name ) b ON na=name AND nu=num

请在此处查看演示:http://rextester.com/MOL28087

关于MySQL - 检索具有最大值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44353111/

相关文章:

java - 找出数据库死锁

php - 如何防止 PHP 中的 SQL 注入(inject)?

sql - 从 varchar 中删除额外的零

mysql - 即使没有用户日志条目,也检索所有用户

php - Laravel 实时统计登录用户数

mysql - 数据库建模 : Shipping Rules

sql - 将 CSV 导入 SQL Server(包括自动表创建)

sql - 如何在不添加行的情况下添加到 SED 的末尾

php - 使用 PDO 对 null 调用成员函数 query()

mysql - 统计MYSQL表中某个点之前的记录