SQL 经典面试题 - 行列转换( 二 )


八:也可以分组后 , 对每行数据进行求和 , 使用 SUM 函数 , 语句和结果如下:SELECT student_name,SUM(IF(COURSE = 'Linux',SCORE,0)) 'Linux',SUM(IF(COURSE = 'MySQL',SCORE,0)) 'MySQL',SUM(IF(COURSE = 'Java',SCORE,0)) 'Java'FROM tb_lemon_gradeGROUP BY student_name;

SQL 经典面试题 - 行列转换

文章插图
 
九:既然使用 IF 语句可以达到效果 , 那使用 CASE 语句也是同样的效果分组 , 使用 MAX 聚合函数
SELECT student_name,max(CASE COURSE when 'Linux' THEN SCORE ELSE 0 END) as 'Linux',max(CASE COURSE when 'MySQL' THEN SCORE ELSE 0 END) as 'MySQL',max(CASE COURSE when 'Java' THEN SCORE ELSE 0 END) as 'Java'FROM tb_lemon_gradeGROUP BY student_name;结果如下图所示:
SQL 经典面试题 - 行列转换

文章插图
 
使用 SUM , 结果如下图所示
SELECT student_name,SUM(CASE COURSE when 'Linux' THEN SCORE ELSE 0 END) as 'Linux',SUM(CASE COURSE when 'MySQL' THEN SCORE ELSE 0 END) as 'MySQL',SUM(CASE COURSE when 'Java' THEN SCORE ELSE 0 END) as 'Java'FROM tb_lemon_gradeGROUP BY student_name;
SQL 经典面试题 - 行列转换

文章插图
 
总结通过上面一步一步的分解 , 我们就完成了一个行转列的 SQL 语句编写 , 现在问题又来了 , 这种方式虽然能达到效果 , 但是如果课程多了 , 
比如还有英语、数学、物理等等课程 , 是不是写起来就笔记麻烦了?有没有动态的方式 , 不管有多少课程 , 通过 SQL 就能一步到位呢?感兴趣大家可以去尝试下 。
p s:小编个人收集啦许多软测资料 , 希望能够帮到学软件测试的朋友们软件资料分享包括但不限于:Java自动化测试、Python自动化测试、性能测试、web测试、App测试 测试开发工具包:appuim安装包、fiddler安装包(也有配套视频教程)、eclipse、git、jmeter、loadrunner、monkey、postman、soapul、Xmind等等
有需要的朋友可以私信小编“测试”领取
SQL 经典面试题 - 行列转换

文章插图
【SQL 经典面试题 - 行列转换】 




推荐阅读