刺球网络安全社区

 找回密码
 立即注册

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

搜索
查看: 233|回复: 0

【转】mysql sql语句:行转列问题

[复制链接]

 成长值: 215051

新浪微博达人勋

  • TA的每日心情

    2018-11-15 03:32
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    1128

    主题

    1709

    帖子

    38万

    积分

    管理员

    技术指数:★★★★★

    Rank: 9Rank: 9Rank: 9

    积分
    382674

    社区QQ达人最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    QQ
    发表于 2018-9-21 03:08:12 | 显示全部楼层 |阅读模式
    存在表score,记录学生的考试成绩,如下图所示:
                   
    现要求以 学生姓名,语文,数学,英语 这种格式显示学生成绩,如下图所示
                   
    具体步骤如下:
    1、首先,使用case when函数输出单个课程的成绩
    case when course='语文' then score end as 语文case when course='数学' then score end as 数学case when course='英语' then score end as 英语
    sql语句:
    select name ,case when course='语文' then score end as 语文,case when course='数学' then score end as 数学,case when course='英语' then score end as 英语  from score;

    输出结果如下图所示:
                   
    2、使用group by 和sum,去掉NULL得出课程的成绩
    sql语句:
    select name ,sum(case when course='语文' then score end) as 语文,sum(case when course='数学' then score end )as 数学,sum(case when course='英语' then score end )as 英语from score group by name;

    输出结果如下图所示
                   
    就得出行转列的输出结果了
    总结:在具体的生活场景中,使用学生姓名,课程1,课程2,课程3……的表结构是不太合理的,比如选修课,不可能每个学生都选一样的课程,这种结构会存在浪费存储空间的情况,比较好的做法就是一行表示一个学生的某个课程的成绩,再使用行转列方法输出想要的成绩结构。



    [发帖际遇]: 刺球 发帖时在路边捡到 1 金球,偷偷放进了口袋. 幸运榜 / 衰神榜

    楼主热帖
    回复 天涯海角搜一下: 百度 谷歌 360 搜狗 搜搜 有道 谷粉 雅虎 必应 即刻

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
     
     
    技术支持
    点击这里给我发消息
    在线客服
    点击这里给我发消息
    点击这里给我发消息
    刺球网安群①:
    刺球网安社区交流群①
    在线时间:
    8:30-21:00
     

    刺球网安 渝公网安备 50011402500080号 ( 渝ICP备15001097号-1 )申请友链|小黑屋| 刺球网络安全社区

    GMT, 2018-12-15 22:38 , Processed in 0.296620 second(s), 42 queries , Gzip On.

    Powered by 刺球网安

    © 2014-2025

    快速回复 返回顶部 返回列表