我有一个非常大的表,我需要从中检索数据。该表如下所示:
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 (...)
谢谢!
答案 0 :(得分:0)
看起来你只需要使用GROUP BY
,就像这样:
select A, max(B)
from table
group by A
order by A
如果我遗失了某些内容,请告诉我。