我有一张桌子,我想选择价值最高的行。例如:
----------------
| user | index |
----------------
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
| 3 | 4 |
| 3 | 7 |
| 4 | 1 |
| 5 | 1 |
----------------
预期结果:
----------------
| user | index |
----------------
| 1 | 1 |
| 2 | 2 |
| 3 | 7 |
| 4 | 1 |
| 5 | 1 |
----------------
我怎么能这样做?我假设它可以通过一些我不知道的oracle函数来完成?
提前致谢: - )
答案 0 :(得分:6)
您可以使用MAX()
功能对分组用户列执行此操作:
SELECT "user"
,MAX("index") AS "index"
FROM Table1
GROUP BY "user"
ORDER BY "user";
结果:
| USER | INDEX |
----------------
| 1 | 1 |
| 2 | 2 |
| 3 | 7 |
| 4 | 1 |
| 5 | 1 |
答案 1 :(得分:2)
如果您有多列
select user , index
from (
select u.* , row_number() over (partition by user order by index desc) as rnk
from some_table u)
where rnk = 1
user
是保留字 - 您应该为列使用不同的名称。答案 2 :(得分:1)
select user,max(index) index from tbl
group by user;
答案 3 :(得分:1)
或者,您可以使用分析函数:
select user,index, max(index) over (partition by user order by 1 ) highest from YOURTABLE
Note:
请勿尝试使用用户,索引,日期等字词作为列名,因为它们是Oracle的保留字。如果您将使用,请使用引号,例如。 “index”,“date”......