选择字段中具有最高字段值的数据

时间:2013-04-30 05:11:56

标签: sql oracle oracle11g

我有一张桌子,我想选择价值最高的行。例如:

----------------
| 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函数来完成?

提前致谢: - )

4 个答案:

答案 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 |

See this SQLFiddle

答案 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”......