今天面试的时候,问了一个sql编写的题目, 求每门成绩的最高分数的id 以及科目,分数。(当时没有写好,郁闷了,面试官还是很好的,给我讲解了一下!)回到宿舍自己有写了一下,两个方法:
SQL> create table test (id int ,subject varchar2(20), score int);
表已创建。
SQL> insert into test values(1 ,'math',95);
已创建 1 行。
SQL> insert into test values(2 ,'math',92);
已创建 1 行。
SQL> insert into test values(3 ,'math',97);
已创建 1 行。
SQL> insert into test values(3 ,'english',97);
已创建 1 行。
SQL> insert into test values(3 ,'chiness',79);
已创建 1 行。
SQL> insert into test values(1,'chiness',79);
已创建 1 行。
SQL> insert into test values(2,'chiness',89);
已创建 1 行。
SQL> insert into test values(1,'english',96);
已创建 1 行。
SQL> insert into test values(2,'english',86);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test;
ID SUBJECT SCORE
---------- -------------------- ----------
1 math 95
2 math 92
3 math 97
3 english 97
3 chiness 79
1 chiness 79
2 chiness 89
1 english 96
2 english 86
已选择9行。
SQL> select id ,subject,score from
2 (select id ,subject,score,row_number() over (partition by subject
3 order by score desc ) rn from test )
4 where rn=1;
ID SUBJECT SCORE
---------- -------------------- ----------
2 chiness 89
3 english 97
3 math 97
SQL> select id ,subject,score from
2 test t3 ,(select max(score) sco from test group by subject) t4
3 where t4.sco=t3.score;
ID SUBJECT SCORE
---------- -------------------- ----------
3 english 97
3 math 97
3 english 97
3 math 97
2 chiness 89
SQL> select distinct id ,subject,score from
2 test t3 ,(select max(score) sco from test group by subject) t4
3 where t4.sco=t3.score ;
ID SUBJECT SCORE
---------- -------------------- ----------
3 english 97
3 math 97
2 chiness 89