Oracle SQL基于列的最大值返回单行

时间:2013-08-21 10:34:01

标签: sql oracle select

我在数据库表中

  

a | 1

     

a | 2

     

a | 3

     

a | 4

我应该如何仅使用SELECT查询返回:

  

a | 4

我尝试过使用不同和最大值的几种组合,但似乎都无关紧要。

7 个答案:

答案 0 :(得分:7)

SELECT MAX(a) AS a FROM <TABLE>

编辑:我认为“a”是列的名称,如果是另一列,请使用

SELECT col1, MAX(col2) FROM <TABLE> GROUP BY col1

每个col1值将返回一行。如果那里有其他值(如b,c),则取决于你想要的是什么。

答案 1 :(得分:5)

查询是这样的:

select * from yourTable 
where B = (select max(B) from yourTable);

答案 2 :(得分:4)

我假设你不只是想得到一个| 4但是还有其他类似的组合,如b | 3,c | 6等, 因此,假设列是c1,c2,查询将是

select * from table_1 where (c2) in (select max(c2) from table_1 group by c1)

如果你的表就像

C1|C2
a|1
a|2
a|4
b|3
c|2
c|6

输出就像

a|4
b|3
c|6

答案 3 :(得分:2)

您可以使用分析函数(假设name列包含'a',value列包含1,2,3,4,...):

select * from (
  select name, value, rownum over (partition by 1 order by value desc) 
  as rn
  from mytable)
where rn = 1

或者,您可以使用普通的ORDER BY:

select * from (
  select name, value
  from mytable
  order by value desc)
where rownum = 1

答案 4 :(得分:1)

假设您的桌子T有两列C1和C2,您是否按照以下方式尝试过?

select C1, C2 from T where C2 in (select max(C2) from T)

编辑 - 我尝试了我的以及其他建议的答案,令我惊讶的是,这个对我来说最好,即使我必须在子查询中进行全表扫描。如果你有你想要的东西,请你与我们分享,或者标出最佳答案?

答案 5 :(得分:1)

试试这样。

select Col_A,Col_B
from Table_X
where Col_B =(select max(Col_B) from Table_X)

答案 6 :(得分:-2)

如果你给出的a是表中的值,那么你可以使用

select column_name, max(coulumn_b) from table_name