MySQL:行列转换(行转列、列转行)

MySQL:行列转换

  • 行表 row:

    nameitemscore
    小明math0
    小明physics99
    小亮math100
    小亮physics0
  • 列表 col:

    namemathphysics
    小明099
    小亮1000
行转列
  1. 方式一:GROUP BY + CASE WHEN

    SELECT name,
    	MAX( CASE item WHEN 'math' THEN score ELSE 0 END ) AS 'math',
    	MAX( CASE item WHEN 'physics' THEN score ELSE 0 END ) AS 'physics' 
    FROM row
    GROUP BY name
    
  2. 方式二:GROUP BY + IF

    SELECT name,
        SUM( IF( item = 'math', score, 0 )) AS 'math',
    	SUM( IF( item = 'physics', score, 0 )) AS 'physics'
    FROM row 
    GROUP BY name
    
列转行
  1. 方式一:GROUP BY + UNION

    SELECT
        name, 'math' , math AS score
    FROM col
    GROUP BY name
    UNION
    SELECT
        name, 'physics' , physics AS score
    FROM col
    GROUP BY name
    
  2. 方式二:DISTINCT + UNION

    SELECT
        distinct name, 'math' , math AS score
    FROM col
    UNION
    SELECT
        distinct name, 'physics' , physics AS score
    FROM col
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值