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

  • 相关阅读:
    Nginx模块fastcgi_cache的几个注意点 转
    CGI与FastCGI 转
    APUE--UNIX环境编程
    与 在记事本中的内容表现方式 原创
    Linux 内核使用的 GNU C 扩展
    GCC内嵌汇编
    linux下64位汇编的系统调用系列
    查看源码Vim+Cscope
    GCC 编绎选项 转
    Linux系统启动流程 图解
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7275260.html
Copyright © 2011-2022 走看看