站长网 MySql教程 mysql需求情景 列转行

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)
 
  “哇塞,要的就是这效果。

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: pniu8212@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部