sql行转列
将行转换为列通常可以通过使用 CASE
表达式和聚合函数来实现。这种操作有时也被称为数据透视。
输出报表的需求中,经常会遇到行转列的诉求,巧妙利用目前sql中具有的函数可以优雅的解决这些问题
练习示例:
比如我现在有一张学生成绩表
其中包含了学生的姓名、学号和他们各科的成绩等
现在我们需要在报表上直观的看到学习的各科成绩,则是把学生的成绩转成列
要求:学号 、姓名、数学分数、语文分数
SELECT stuNum,stuName, MAX(CASE WHEN subject = '数学' THEN score END) AS math_score, MAX(CASE WHEN subject = '语文' THEN score END) AS chinese_score FROM student_score GROUP BY stuNum,stuName
CASE WHEN 作为判断条件来帮助我们拆分以前的行变成列。
当然我们还可以利用IF(expr1,expr2,expr3)函数(根据数据库类型选择对应函数)来实现
SELECT stuNum,stuName, MAX(IF(subject = '数学',score,0.00)) AS math_score, MAX(IF(subject = '语文',score,0.00)) AS chinese_score FROM student_score GROUP BY stuNum,stuName
如果你的拆分逻辑较为复杂,也可以再接上if上接and条件来处理
SELECT stuNum,stuName, MAX(IF(subject = '数学' and score>95,score,'**')) AS math_score, MAX(IF(subject = '语文' and score>95,score,'**')) AS chinese_score FROM student_score GROUP BY stuNum,stuName
这里千万注意前面有MAX函数,所以不满足条件的部分不要换成字符串,否则和预期值不一样,原因大家自行查阅分析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix