• ADADADADAD

    mysql需求场景-列转行[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:54:56

    作者:文/会员上传

    简介:

    由于是模拟场景,直入主题,表名称及结构定义很low,请忽视!(1)现有学生分数表如下:mysql> select * from vmark1;+-----+--------+--------+------+| sid | sname| course | mark |+-

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

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

    mysql需求场景-列转行.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysqlsql优化