最近在面试中经常遇到一些比较好的问题例如:比较数据库表中三列中的最大一列。以前做oracle开发时会想到使用行转列的方法来做,突然间感觉那个方法有点麻烦,所以换种思路来解决问题,下面模拟一个应用场景:      

学生表中存放 学生姓名、语文成绩、数学成绩、英语成绩,查询出每个学生的最高成绩(即得分最高的课程),首先查看数据库表结构:

wKioL1ORgruhBT02AAE4z_Gvuw8506.jpg

/***


 *  比较三列中的最大一列

 *  应用场景:

 *      学生表中存放 学生姓名、语文成绩、数学成绩、英语成绩,查询出每个学生的最高成绩(即得分最高的课程)

 */

select tbl.user_name,

       tbl.cn_score,

       tbl.math_score,

       tbl.en_score,

       decode(sign(tbl.en_score-tbl.t_mod),1,tbl.en_score,tbl.t_mod) max_score

 from (

         select t.user_name,t.cn_score,t.math_score,t.en_score,

                decode (sign(t.cn_score-t.math_score),1,t.cn_score,t.math_score) as t_mod

           from TEST_TB_GRADE2 t

 )tbl;

wKioL1ORg93wiUpVAADhStHSz5k580.jpg

另外一种表结构的查询,最大成绩比较简单,顺便就写一下了,如果各位看官有更好的方法可以分享那就更好了。表结构:

wKiom1ORhpnyB7LJAAHXEzMGV9g069.jpg

select user_name,max(score) 

  from TEST_TB_GRADE t 

 group by user_name

wKiom1ORhxOixixBAADELOotY_s259.jpg