oracle sql 最大值

oracle sql max value

我有一个要求,我需要从每个部门中找到最多一个值,我只需要一个值,即使两个人有相同的最大值

drop table tst;
create table tst(val number,dept varchar2(20),name varchar2(10));
insert into tst values(1,'tamil','john');
insert into tst values(2,'tamil','krish');
insert into tst values(3,'maths','vijay');
insert into tst values(4,'maths','raja');
insert into tst values(4,'maths','vinay');

select * from tst;
VAL  DEPT   NAME
1   tamil   john
2   tamil   krish
3   maths   vijay
4   maths   raja
4   maths   vinay

当我试图找到最大值时,我会得到数学系的 2 个值

select * from tst t1
where t1.val= (select max(val) from tst t2 where t2.dept=t1.dept
              group by dept);

2 位泰米尔语克里希语
4 数学王
4 数学 vinay

我也想要

2 位泰米尔语克里希语
4 数学 vinay

2 位泰米尔语克里希语
4 数学王

如何实现这个 ion oracle sql

您可以按如下方式使用ROW_NUMBER

SELECT * FROM
(SELECT T.*, ROW_NUMBER(OVER PARTITION BY DEPT ORDER BY VAL DESC) AS RN
   FROM TST T)
WHERE RN = 1

一种方法是在聚合函数中也添加 name

select max(VAL) val, dept, max(name) name
from tst
group by dept