zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Linux下的MySQL主从同步
    人不能同时在两个地方做猪(Scrum Team)
    memcache安装
    Java开发中的Memcache原理及实现
    linux mv
    nginx
    idea 热部署
    vue watch
    vue入门
    基于vue-cli快速构建
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7275260.html
Copyright © 2011-2022 走看看