这感觉就像一个愚蠢的问题,因为它应该有一个简单的答案,但我找不到它。我的桌子看起来像这样:
|-----|---|
| 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 |
|-----|--------|
我想念什么?
答案 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;
其他数据库也可能有类似的选择。