最近在面试中经常遇到一些比较好的问题例如:比较数据库表中三列中的最大一列。以前做oracle开发时会想到使用行转列的方法来做,突然间感觉那个方法有点麻烦,所以换种思路来解决问题,下面模拟一个应用场景:
学生表中存放 学生姓名、语文成绩、数学成绩、英语成绩,查询出每个学生的最高成绩(即得分最高的课程),首先查看数据库表结构:
/*** * 比较三列中的最大一列 * 应用场景: * 学生表中存放 学生姓名、语文成绩、数学成绩、英语成绩,查询出每个学生的最高成绩(即得分最高的课程) */ 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; |
select user_name,max(score) from TEST_TB_GRADE t group by user_name |
转载于:https://blog.51cto.com/maliujiang/1423108