|
我目前还在琢磨第二个,在网上有看到大神贴的代码,甚是佩服,我这里分享给大家,多提意见哈!!
- SELECT b.lession_name "课程",
- (SELECT c.stu_name
- FROM t_stu_profile c
- WHERE a.highest_stu_id = c.stu_id) || ' ' || a.highest_score "第一名(姓名+分数)",
- (SELECT c.stu_name
- FROM t_stu_profile c
- WHERE a.second_stu_id = c.stu_id) || ' ' || a.second_score "第二名(姓名+分数)",
- (SELECT c.stu_name
- FROM t_stu_profile c
- WHERE a.third_stu_id = c.stu_id) || ' ' || a.third_score "第三名(姓名+分数)"
- FROM t_lession b,
- (SELECT lession_id, MAX(decode(num, 1, stu_id, NULL)) highest_stu_id,
- MAX(decode(num, 1, score, NULL)) highest_score,
- MAX(decode(num, 2, stu_id, NULL)) second_stu_id,
- MAX(decode(num, 2, score, NULL)) second_score,
- MAX(decode(num, 3, stu_id, NULL)) third_stu_id,
- MAX(decode(num, 3, score, NULL)) third_score
- FROM (SELECT stu_id, lession_id, score,
- row_number() over(PARTITION BY lession_id ORDER BY score DESC) AS num
- FROM t_score)
- WHERE num <= 3
- GROUP BY lession_id) a
- WHERE b.lession_id = a.lession_id;
复制代码
|
|