MySQL经典面试SQL汇总
经典案例一.行转列,列转行
1.行转列(顾名思义将多行转多列)
案例:表结构数据如图所示;
分析:按姓名将一个每个学生的多条分数记录合并成一行记录
slq语句:
##测试行转列(多行变多列)
select user_NAME ,
max(case course when '数学' Then score Else 0 end )数学,
MAX(CASE course WHEN '英语' THEN score ELSE 0 END )英语,
MAX(CASE course WHEN '语文' THEN score ELSE 0 END )语文
from test_tb_grade
group by user_NAME
转换后结果集:
注:在使用group by 进行分组时需要注意出现在group by子语句中的字段可以直接使用,不再其中的字段需要使用聚合函数进行处理;
2.列转行(顾名思义多列转多行)
案例:表结构数据如图所示;
分析:将每名学生的单科成绩独立成一行记录;
slq语句:
SELECT user_name, '语文' COURSE , CN_SCORE AS SCORE FROM test_tb_grade2
UNION SELECT user_name, '数学' COURSE, MATH_SCORE AS SCORE FROM test_tb_grade2
UNION SELECT user_name, '英语' COURSE, EN_SCORE AS SCORE FROM test_tb_grade2
ORDER BY user_name,COURSE;
注:使用UNION关键字可以将多个sql查询的结果集进行整合,最终会形成一个完整的结果集;
持续更新中…