【题目描述】
下表展示的是某班级同学各个科目的成绩,每一行数据表示一位同学某一科目的成绩,要求将每位同学各个科目的成绩存储为一行展示:
![03774221e36bfebcb74fc884bdb6f5ba.png](https://i-blog.csdnimg.cn/blog_migrate/d62c033bb5d01f404e2e307d267a5489.png)
【SQL实现逻辑】
-- 将每位学生的各科目成绩存储到一行数据,示例: 1 张三 数学分数 语文分数 英语分数
SELECT
score_new.学号,
score_new.姓名,
max(if(score_new.科目 like '%数学%', score_new.分数, null)) as 数学分数,
max(if(score_new.科目 like '%语文%', score_new.分数, null)) as 语文分数,
max(if(score_new.科目 like '%英语%', score_new.分数, null)) as 英语分数
FROM
score_new
GROUP BY
学号,
姓名;
![318efa5e86d3b33161404ee099b413cf.png](https://i-blog.csdnimg.cn/blog_migrate/b76c14201ce7d665f5467535fbe309a1.png)
【解析】
SQL实现的巧妙之处在于,巧妙使用max这种聚合函数,避免了分数字段不在group by中,直接select报错的问题。