学生 | teacher | 学习评价 | 品德评价 | 学习评价分数 | 品德评价分数 |
---|---|---|---|---|---|
张三 | 王 | A | B | 86 | 98 |
张三 | 李 | B | A+ | 75 | 56 |
李四 | 钟 | A | A- | 70 | 98 |
李四 | 陈 | A | B | 60 | 89 |
王五 | 钱 | A+ | A | 77 | 97 |
规则是取学习评价最高分数对应的学习评价和最低分数的品德评价
结果显示为:
学生 | teachers | 学习评价 | 品德评价 |
---|---|---|---|
张三 | 王,李 | A | A+ |
李四 | 钟,陈 | A | B |
王五 | 钱 | A+ | A |
SELECTname
,
GROUP_CONCAT(teacher),
SUBSTRING(
max(concat(LPAD(xx_score,3,"0"),",",xx_pj)),5),
SUBSTRING(
min(concat(LPAD(pd_score,3,"0"),",",pd_pj)),5)
FROM
student_score
group by name
上面这个是mysql的
SELECTname
,
LISTAGG(teacher,",") WITHIN GROUP(ORDER BY teacher),
SUBSTR(
max(concat(LPAD(xx_score,3,"0"),",",xx_pj)),5),
SUBSTR(
min(concat(LPAD(pd_score,3,"0"),",",pd_pj)),5)
FROM
student_score
group by name
下面这个是oracle的
select 学生,
listagg(teacher,',') within group (order by 1) teachers,
max(学习评价) 学习评价,
max(品德评价) 品德评价
from (
select 学生,
teacher,
first_value(学习评价) over(partition by 学生 order by 学习评价分数 desc) 学习评价,
first_value(品德评价) over(partition by 学生 order by 品德评价分数 ) 品德评价
from t)
group by 学生