Sql ORACLE:在第1列中选择了最大值后,在第2列中选择最大值

Sql ORACLE:在第1列中选择了最大值后,在第2列中选择最大值,sql,oracle,Sql,Oracle,我在ORACLE中有一个表T,其值为: cod1 cod2 A B ================== A AA 2 0 A AB 2 2 B BB 1 2 A AA 3 0 A AA 3 1 B BB 2 1 我想返回最大值(B)为最大值(A)的记录(cod1 cod2)。 例如: A AA 3 1 A AB 2 2 B BB 2 1

我在ORACLE中有一个表T,其值为:

cod1 cod2  A   B
==================
A    AA    2   0
A    AB    2   2
B    BB    1   2
A    AA    3   0
A    AA    3   1
B    BB    2   1    
我想返回最大值(B)为最大值(A)的记录(cod1 cod2)。 例如:

A    AA    3   1
A    AB    2   2
B    BB    2   1
这可能吗

select cod1, cod2, MAX(B) 
from T
group by cod1, cod2
where (cod1, cod2, A) IN (
   select cod1, cod2, MAX(A) 
   from T
   group by cod1, cod2
);

为什么不做简单的聚合:

select cod1, cod2, max(a), max(b)
from t
group by cod1, cod2;
如果需要完整记录,则可以使用相关子查询:

select t.*
from t 
where t.b = (select t1.b
             from t t1 
             where t1.cod1 = t.cod1 and t1.cod2 = t.cod2
             order by t1.a desc, t1.b desc
             fetch first 1 rows only
            );

为什么不做简单的聚合:

select cod1, cod2, max(a), max(b)
from t
group by cod1, cod2;
如果需要完整记录,则可以使用相关子查询:

select t.*
from t 
where t.b = (select t1.b
             from t t1 
             where t1.cod1 = t.cod1 and t1.cod2 = t.cod2
             order by t1.a desc, t1.b desc
             fetch first 1 rows only
            );

我们可以在这里尝试使用两级排序的
行号

WITH cte AS (
    SELECT cod1, cod2, A, B,
        ROW_NUMBER() OVER (PARTITION BY cod1, cod2 ORDER BY A DESC, B DESC) rn
    FROM yourTable
)

SELECT cod1, cod2, A, B
FROM cte
WHERE rn = 1;


我们可以尝试在此处使用两级排序的
行编号

WITH cte AS (
    SELECT cod1, cod2, A, B,
        ROW_NUMBER() OVER (PARTITION BY cod1, cod2 ORDER BY A DESC, B DESC) rn
    FROM yourTable
)

SELECT cod1, cod2, A, B
FROM cte
WHERE rn = 1;

(继续解决最初问题)

如果我想返回包含其他列“MAXs”和“1”或“0”的表

例如:

cod1 cod2  A   B   MAXs
=======================
 A    AA   2   0    0
 A    AB   2   2    1
 B    BB   1   2    0
 A    AA   3   0    0
 A    AA   3   1    1
 B    BB   2   1    1
(继续解决最初问题)

如果我想返回包含其他列“MAXs”和“1”或“0”的表

例如:

cod1 cod2  A   B   MAXs
=======================
 A    AA   2   0    0
 A    AB   2   2    1
 B    BB   1   2    0
 A    AA   3   0    0
 A    AA   3   1    1
 B    BB   2   1    1