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.

相关推荐: CentOS6.5下通过yum仓库安装mysql

环境:Centos6.5查看centos版本:1.查看是否安装了mysql显示没有安装。2.安装mysql客户端3.安装mysql开发云主机域名服务端4.安装mysql客户端和服务端5.查询mysql是否已安装完成以安装mysql客户端和服务端为例:6.启动m…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/04 18:43
下一篇 06/04 18:44

相关推荐