create table test (id int, name varchar(10), score int, classname varchar(20)); insert into test values (1,'张三',100,'一班'); insert into test values (2,'李四',89,'一班'); insert into test values (3,'王五',97,'一班'); insert into test values (4,'赵六',87,'二班'); insert into test values (5,'孙七',94,'二班'); insert into test values (6,'杨八',76,'二班');
select t.* from (select test.*,row_number() over (partition by classname order by score desc) rn from test) t where rn=1;