MySQL - 检索具有最大值

时间:2017-06-04 10:35:16

标签: 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

有多个名为杰克的记录,但我希望得到一个最大的" num"值。

我已尝试使用以下查询:

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

但它返回 id和第一条记录的名称(第一个" Jack")但是最新的数字。

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

当然我可以尝试使用" Order by"但我也希望检索具有最高值的 only 记录。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您需要对MAX使用内部查询,例如:

SELECT * 
FROM employee
WHERE num = (
    SELECT MAX(num) FROM employee
);

这将为您提供所需的结果。

答案 2 :(得分:0)

MAX(column_name)将返回所有记录的最大值

SELECT emp.* FROM `employee` emp INNER JOIN
(SELECT name,MAX(num) as num FROM `employee` GROUP BY name) tbl
ON emp.`name` = tbl.`name` AND emp.`num` = tbl.`num`

我们使用内部查询找出该名称的名称和最大数量,然后使用名称col和num col上的主表连接。 我们需要提到group by,它给出了该名称的每个num的名称和最大值

我认为,这应该可以解决你的目的