mysql需求情景 列转行
发布时间:2022-07-10 04:07:39 所属栏目:MySql教程 来源:互联网
导读:由于是模拟场景,直入主题,表名称及结构定义很low,请忽视! (1)现有学生分数表如下: mysql select * from vmark1; +-----+--------+--------+------+ | sid | sname | course | mark | +-----+--------+--------+------+ | 1 | 张三 | jsj | 90 | | 1 |
由于是模拟场景,直入主题,表名称及结构定义很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) “哇塞,要的就是这效果。 (编辑:航空爱好网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐