Sql ORACLE:在第1列中选择了最大值后,在第2列中选择最大值
我在ORACLE中有一个表T,其值为: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
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