Oracle:如何获取列表中每个项目的最大值

时间:2016-02-23 17:08:38

标签: oracle select max sqlplus

我有一个非常大的表,我需要从中检索数据。该表如下所示:

A        B            C        D
1        foo          4        q
1        fool         2        p
1        fools        13       a
2        pho          5        d
3        phone        14       g
3        phones       6        f

我正在尝试运行类似:

select max(B) from table where A = 1 union
select max(B) from table where A = 2 union
.
.
.
select max(B) from table where A = 50000;

我想要的是:

1 -> fools
2 -> pho
3 -> phones

我有大约50,000条记录来运行此查询。 上面的方法在理论上是有效的(我尝试了一个小子集),但我认为对每个50000值进行一次选择查询是低效的。 这也导致进程内存不足错误。

有没有办法可以在一个查询中运行它? 我试过了:

select max(B) from table where A in (first group of 1000) union
select max(B) from table where A in (1000...2000) union
.
.
.
select max(B) from table where A in (40000...50000)

但是这给了我每个选择查询只有一个最大值(我理解为什么) 我真正想要的是50000最大值。

如果我使用

,我有办法获得列表中每个项目的max(B)值吗?
select max(B) from table where A in (...)

谢谢!

1 个答案:

答案 0 :(得分:0)

看起来你只需要使用GROUP BY,就像这样:

select A, max(B)
from table
group by A
order by A

如果我遗失了某些内容,请告诉我。