• mysql 列转行,合并字段的方法


    数据表(表名:xsk)
    +----+------+-----------+-------+
    | id | name| course | score |
    +----+------+-----------+-------+
    | 1 | 刘备 | 英语 | 100 |
    | 2 | 关羽 | 英语 | 99 |
    | 3 | 张飞 | 英语 | 98 |
    | 4 | 刘备 | 数学 | 100 |
    | 5 | 关羽 | 数学 | 99 |
    | 6 | 张飞 | 数学 | 98 |
    +----+------+-----------+-------+

    列转行:利用max(case when then)

    max---聚合函数 取最大值

    (case course when '英语' then score else 0 end) ---判断
    as 语文---别名作为列名

    select name,MAX(case when course='英语' then score end ) as 英语,MAX(case when course ='数学' then score end) as 数学 from xsk group by name ;

    +------+--------+---------+
    | name | 英语 | 数学 |
    +------+--------+--------+
    | 刘备 | 98 | 98 |
    | 关羽 | 100 | 100 |
    | 张飞 | 99 | 99 |
    +------+--------+---------+

    合并字段显示:利用group_cancat(course,”:”,”score”)

    select name,group_concat(course,":",score)as 成绩 from xsk group by name;

    +--------+---------------------------------+
    | name | 成绩 |
    +--------+---------------------------------+
    | OO | english:98,chinese:98 |
    | xx | english:100,chinese:100 |
    | zz | english:99,chinese:99 |
    +--------+---------------------------------+

    group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。
    比较抽象,难以理解。
    通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函
    数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

    group_concat只有与group by语句同时使用才能产生效果


    另附原文:
    http://www.jb51.net/article/109487.htm

  • 相关阅读:
    使用 GitHub, Jekyll 打造自己的免费独立博客
    如何解决数据科学计数法在数据库中的显示
    RDF
    C# 在 4.0 以后一共有3种创建线程的方式
    C#多线程
    1、框架概述
    3、IDEA 中使用 Maven
    2、Maven 核心概念
    1、Maven 概述
    JDK动态代理
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7275260.html
Copyright © 2020-2023  润新知