首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从列表结果中获取最大值

从列表结果中获取最大值
EN

Stack Overflow用户
提问于 2014-05-01 21:54:20
回答 4查看 101关注 0票数 0

在employee表中有以下结果:

代码语言:javascript
复制
 ID | Name  | Number
---------------------
1   | Dani  |  15
2   | Dani  |  20
3   | Yara  |  10

我需要编写sql查询以获得以下结果:

代码语言:javascript
复制
ID | Name | Number
------------------
2  | Dani |   20  
3  | Yara |   10

如您所见,如果包含员工频繁名称的结果,则查询必须获得最大值(数字)。

我怎么能这么做?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-01 21:58:23

由于您还需要指向最大值的正确id,所以这是最简单的方法:

代码语言:javascript
复制
WITH TT AS (
    SELECT ID, Name, Number, rank() OVER(PARTITION BY Name ORDER BY Number DESC) R
    FROM employee
)
SELECT ID, Name, Number
FROM TT
WHERE R = 1;

它应该在Oracle和Server上正确工作,因为它们都支持窗口功能。

SQLFiddle example using Oracle

票数 5
EN

Stack Overflow用户

发布于 2014-05-01 21:56:35

根据您提供的数据集,您可以简单地使用GROUP BY子句。您提到的各种引擎中的语法都非常相似。

在MySQL中:

代码语言:javascript
复制
SELECT MAX(`ID`), `Name`, MAX(`Number`)
FROM `Employee`
GROUP BY `Name`

在T(Server)中:

代码语言:javascript
复制
SELECT MAX([ID]), [Name], MAX([Number])
FROM [Employee]
GROUP BY [Name]

在Oracle中:

代码语言:javascript
复制
SELECT MAX("ID"), "Name", MAX("Number")
FROM "Employee"
GROUP BY "Name"

请注意,这独立计算IDNumber的最大值。例如,如果您拥有这个数据集:

代码语言:javascript
复制
ID - Name - Number
 1 - Dani - 20
 2 - Dani - 15
 3 - Yara - 10

你会得到这样的结果:

代码语言:javascript
复制
ID - Name - Number
 2 - Dani - 20
 3 - Yara - 10

注意,ID for Dani是2,因为这是DaniID列的最大值。如果您想获得1的ID,那么使用 solution可能会更好。

票数 1
EN

Stack Overflow用户

发布于 2014-05-01 21:59:59

您希望找到每个名称的最大值,然后使用NameNumber将其连接回原始表,以便可以访问其所有值(如ID)。

代码语言:javascript
复制
SELECT t.*
   FROM Employee e
   JOIN (SELECT Name, MAX(Number) AS Number
            FROM Employee e
            GROUP BY Name) maxnum ON maxnum.Number = e.Number AND maxnum.Name = e.Name
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23417309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档