如果列具有多个最大值,则SQL max()仅返回1行

时间:2015-10-08 23:23:54

标签: mysql sql max

这感觉就像一个愚蠢的问题,因为它应该有一个简单的答案,但我找不到它。我的桌子看起来像这样:

|-----|---|
|  a  | b |
|-----|---|
| ALA | 2 |
| ASP | 1 |
| SER | 1 |
| VAL | 2 |
|-----|---|

我需要的是获得具有最大值的两行(我不知道提前的值),这意味着上面的示例应该给出:

|-----|--------|
|  a  | max(b) |
|-----|--------|
| ALA |   2    |
| VAL |   2    |
|-----|--------|

我正在尝试

SELECT a, max(b) FROM table;

但它只给出第一个最大行:

|-----|--------|
|  a  | max(b) |
|-----|--------|
| ALA |   2    |
|-----|--------|

我想念什么?

3 个答案:

答案 0 :(得分:5)

SELECT a,b FROM table
WHERE b = (SELECT MAX(b) FROM table)

答案 1 :(得分:0)

SELECT *
FROM YourTable Y
INNER JOIN (
       SELECT Max(b) mB
       FROM YourTable
       ) M
On Y.b = M.mb

此外,如果你有sql server 2008+ / oracle,你可以使用 RANK

之类的东西
SELECT *
FROM ( 
       SELECT a, b, RANK() over (order by B DESC) rn
       FROM YourTable
     ) T
WHERE T.rn = 1

答案 2 :(得分:0)

如果您使用SQL Server,则可以使用TOP WITH TIES,这应该比子查询或RANK更有效。

SELECT TOP(1) WITH TIES 
    a, b
FROM YourTable
ORDER BY b DESC;

其他数据库也可能有类似的选择。