sql—对于d中c行中的每个值,返回最大值为a的行

1sbrub3j  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(249)

我有4列a,b,c,d
样本数据

a | b | c | d |

1 | 1 | 101 | 0
2 | 1 | 101 | 0
3 | 1 | 101 | 1
4 | 1 | 102 | 0
5 | 1 | 102 | 0
1 | 2 | 101 | 0
2 | 2 | 101 | 1

编写一个sql命令,这样它应该返回那些行,其中对于b中的每个c值,返回最大值为a的行
i、 e预期输出

a | b | c | d |

3 | 1 | 101 | 1
5 | 1 | 102 | 0
2 | 2 | 101 | 1
brccelvz

brccelvz1#

可以使用相关子查询:

select t.*
from t
where t.a = (select max(t2.a) from t t2 where t2.b = t.b and t2.c = t.c);

带索引的 t(b, c, a) ,这往往有最好的表现。
另一种选择是窗口功能:

select t.*
from (select t.*, row_number() over (partition by b, c order by a desc) as seqnum
      from t
     ) t
where seqnum = 1;
3duebb1j

3duebb1j2#

你没有提到你正在使用的数据库。在postgresql中,您可以执行以下操作:

select distinct on (b, c) a, b, c, d
from t
order by b, c, a desc

相关问题