mysql需求场景-列转行

发布时间:2020-07-26 21:16:16 作者:spihiker
来源:网络 阅读:3107

由于是模拟场景,直入主题,表名称及结构定义很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.

推荐阅读:
  1. oracle 批量列转行 逗号分隔
  2. 列转行函数使用SQL

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql sql 优化

上一篇:Android开发实践:JNI层线程回调Java函数示例

下一篇:多林多域同步到同一Office365订阅

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》