让我们说这是“transcations”表:
first_type second_type value
m t1 2
a t2 2
a t3 2
b t1 6
g t4 4
b t2 2
r t4 3
m t4 2
g t1 2
b t4 6
a t4 17
如何在显示关联的“second_type”列时选择每个“first_type”的最大值,所需的结果是:
first_type second_type value
m t1 2
b t1 6
g t4 4
r t4 3
m t4 2
b t4 6
a t4 17
或仅保留最高值,省略“first_type”列具有相同值的其他行,如下所示:
first_type second_type value
m t1 2
g t4 4
r t4 3
b t4 6
a t4 17
我尝试在按'first_type'分组时选择最大值但我不能选择'第二种类型,因为Oracle不允许选择不在group子句中的内容。
答案 0 :(得分:2)
您想要rank()
:
select first_type, second_type, value
from (select t.*,
rank() over (partition by first_type order by value desc) as seqnum
from t
) t
where seqnum = 1;
注意:这会使用rank()
,因为您的数据有关联,而您想要所有数据。
答案 1 :(得分:1)
你可以使用where in in max
select first_type, second_type, value
from my_table
where ( first_type, value) in (select first_type, max(value)
from my_table
group by first_type)