mysql 列换行 表设计 设计_mysql需求场景-列转行

由于是模拟场景,直入主题,表名称及结构定义很low,请忽视!

(1)现有学生分数表如下:

mysql> select * from vmark1;

+-----+--------+--------+------+

| sid | sname | course | mark |

+-----+--------+--------+------+

| 1 | 张三 | jsj | 90 |

| 1 | 张三 | yuwen | 65 |

| 1 | 张三 | yingyu | 80 |

| 2 | 李四 | jsj | 80 |

| 2 | 李四 | yuwen | 98 |

| 2 | 李四 | yingyu | 90 |

+-----+--------+--------+------+

6 rows in set (0.00 sec)

(2)需求是以更直观的方式,查看学生的成绩。细化也就是把mark这列的值,以行的形式展示。通过case..when语句查询:

mysql> select sid,sname,case when course='jsj' then mark end jsj,case when course='yuwen' then mark end yuwen,case when course='yingyu' then mark end yingyu from vmark1;

+-----+--------+------+-------+--------+

| sid | sname | jsj | yuwen | yingyu |

+-----+--------+------+-------+--------+

| 1 | 张三 | 90 | NULL | NULL |

| 1 | 张三 | NULL | 65 | NULL |

| 1 | 张三 | NULL | NULL | 80 |

| 2 | 李四 | 80 | NULL | NULL |

| 2 | 李四 | NULL | 98 | NULL |

| 2 | 李四 | NULL | NULL | 90 |

+-----+--------+------+-------+--------+

6 rows in set (0.01 sec)

我靠,变成行了。但看起来依然很不友好!

(3)通过函数和group by字句优化:

mysql> select sid,sname,sum(case when course='jsj' then mark end) jsj,sum(case when course='yuwen' then mark end) yuwen,sum(case when course='yingyu' then mark end) yingyu from vmark1 group by sid;

+-----+--------+------+-------+--------+

| sid | sname | jsj | yuwen | yingyu |

+-----+--------+------+-------+--------+

| 1 | 张三 | 90 | 65 | 80 |

| 2 | 李四 | 80 | 98 | 90 |

+-----+--------+------+-------+--------+

2 rows in set (0.00 sec)

“哇塞,要的就是这效果。别动了。。就这样”。运营妹子激动的说。

好吧。over.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值