oracle - 为每两种类型

时间:2016-10-05 18:01:35

标签: sql database oracle group-by

让我们说这是“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子句中的内容。

2 个答案:

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