精华内容
下载资源
问答
  • 2021-01-19 16:35:42

    1. 创建表:

    mysql> CREATE TABLE `TEST_TB_GRADE` (

    -> `ID` int(10) NOT NULL AUTO_INCREMENT,

    -> `USER_NAME` varchar(20) DEFAULT NULL,

    -> `COURSE` varchar(20) DEFAULT NULL,

    -> `SCORE` float DEFAULT '0',

    -> PRIMARY KEY (`ID`)

    -> ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    - 插入数据:

    mysql> insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE) values

    -> ("张三", "数学", 34),

    -> ("张三", "语文", 58),

    -> ("张三", "英语", 58),

    -> ("李四", "数学", 45),

    -> ("李四", "语文", 87),

    -> ("李四", "英语", 45),

    -> ("王五", "数学", 76),

    -> ("王五", "语文", 34),

    -> ("王五", "英语", 89);

    - 查询表:

    mysql> select * from test_tb_grade;

    +----+-----------+--------+-------+

    | ID | USER_NAME | COURSE | SCORE |

    +----+-----------+--------+-------+

    | 1 | 张三 | 数学 | 34 |

    | 2 | 张三 | 语文 | 58 |

    | 3 | 张三 | 英语 | 58 |

    | 4 | 李四 | 数学 | 45 |

    | 5 | 李四 | 语文 | 87 |

    | 6 | 李四 | 英语 | 45 |

    | 7 | 王五 | 数学 | 76 |

    | 8 | 王五 | 语文 | 34 |

    | 9 | 王五 | 英语 | 89 |

    +----+-----------+--------+-------+

    - 不用聚集函数和group by语句:

    mysql> SELECT user_name ,

    -> (CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,

    -> (CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,

    -> (CASE course WHEN '英语' THEN score ELSE 0 END ) 英语

    -> FROM test_tb_grade;

    +-----------+--------+--------+--------+

    | user_name | 数学 | 语文 | 英语 |

    +-----------+--------+--------+--------+

    | 张三 | 34 | 0 | 0 |

    | 张三 | 0 | 58 | 0 |

    | 张三 | 0 | 0 | 58 |

    | 李四 | 45 | 0 | 0 |

    | 李四 | 0 | 87 | 0 |

    | 李四 | 0 | 0 | 45 |

    | 王五 | 76 | 0 | 0 |

    | 王五 | 0 | 34 | 0 |

    | 王五 | 0 | 0 | 89 |

    +-----------+--------+--------+--------+

    - 用group by语句:

    mysql> SELECT user_name ,

    -> (CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,

    -> (CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,

    -> (CASE course WHEN '英语' THEN score ELSE 0 END ) 英语

    -> FROM test_tb_grade

    -> group by user_name;

    +-----------+--------+--------+--------+

    | user_name | 数学 | 语文 | 英语 |

    +-----------+--------+--------+--------+

    | 张三 | 34 | 0 | 0 |

    | 李四 | 45 | 0 | 0 |

    | 王五 | 76 | 0 | 0 |

    +-----------+--------+--------+--------+

    - 用group by语句和聚集函数实现行转列

    mysql> SELECT user_name ,

    -> MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,

    -> MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,

    -> MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语

    -> FROM test_tb_grade

    -> group by user_name;

    +-----------+--------+--------+--------+

    | user_name | 数学 | 语文 | 英语 |

    +-----------+--------+--------+--------+

    | 张三 | 34 | 58 | 58 |

    | 李四 | 45 | 87 | 45 |

    | 王五 | 76 | 34 | 89 |

    +-----------+--------+--------+--------+

    2. 创建表:

    CREATE TABLE `TEST_TB_GRADE2` (

    `ID` int(10) NOT NULL AUTO_INCREMENT,

    `USER_NAME` varchar(20) DEFAULT NULL,

    `CN_SCORE` float DEFAULT NULL,

    `MATH_SCORE` float DEFAULT NULL,

    `EN_SCORE` float DEFAULT '0',

    PRIMARY KEY (`ID`)

    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    - 插入数据:

    insert into TEST_TB_GRADE2(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) values

    ("张三", 34, 58, 58),

    ("李四", 45, 87, 45),

    ("王五", 76, 34, 89);

    - 查询:

    mysql> select * from test_tb_grade2;

    +----+-----------+----------+------------+----------+

    | ID | USER_NAME | CN_SCORE | MATH_SCORE | EN_SCORE |

    +----+-----------+----------+------------+----------+

    | 1 | 张三 | 34 | 58 | 58 |

    | 2 | 李四 | 45 | 87 | 45 |

    | 3 | 王五 | 76 | 34 | 89 |

    +----+-----------+----------+------------+----------+

    - 不求并集:

    mysql> select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2;

    +-----------+--------+-------+

    | user_name | COURSE | SCORE |

    +-----------+--------+-------+

    | 张三 | 语文 | 34 |

    | 李四 | 语文 | 45 |

    | 王五 | 语文 | 76 |

    +-----------+--------+-------+

    - 求并集:

    mysql> select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2

    -> union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2

    -> union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2;

    +-----------+--------+-------+

    | user_name | COURSE | SCORE |

    +-----------+--------+-------+

    | 张三 | 语文 | 34 |

    | 李四 | 语文 | 45 |

    | 王五 | 语文 | 76 |

    | 张三 | 数学 | 58 |

    | 李四 | 数学 | 87 |

    | 王五 | 数学 | 34 |

    | 张三 | 英语 | 58 |

    | 李四 | 英语 | 45 |

    | 王五 | 英语 | 89 |

    +-----------+--------+-------+

    - order by语句:

    mysql> select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2

    -> union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2

    -> union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2

    -> order by user_name,COURSE;

    +-----------+--------+-------+

    | user_name | COURSE | SCORE |

    +-----------+--------+-------+

    | 张三 | 数学 | 58 |

    | 张三 | 英语 | 58 |

    | 张三 | 语文 | 34 |

    | 李四 | 数学 | 87 |

    | 李四 | 英语 | 45 |

    | 李四 | 语文 | 45 |

    | 王五 | 数学 | 34 |

    | 王五 | 英语 | 89 |

    | 王五 | 语文 | 76 |

    +-----------+--------+-------+

    更多相关内容
  • mysql行转列、列转行  语句不难,不做多余解释了,看语句时,从内往外一句一句剖析 行转列  有如图所示的表,现在希望查询的结果将行转成列  建表语句如下: CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT...
  • Mysql 行转列,列转行 SQL语句示例表结构SQL Mysql 行转列,列转行 SQL语句示例表结构SQL
  • PAGE / NUMPAGES 列转行 主要讨论sys_connect_by_path的使用方法 1带层次关系 SQL> create table dept(deptno number,deptname varchar2(20,mgrno number;文档收集自网络仅用于个人学习 Table created. SQL> insert ...
  • 列转行:利用max(case when then) max—聚合函数 取最大值 (case course when ‘语文’ then score else 0 end) —判断 as 语文—别名作为列名 SELECT `name`, MAX( CASE WHEN course='\u8bed\u6587' THEN ...
  • 下面小编就为大家带来一篇mysql列转行以及年月分组实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要给大家介绍了关于SQL行转列、列转行的简单实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • mysql行转和列转行

    2022-01-06 17:45:42
    mysql行转和列转行

    行转列

    1、初始数据

    在这里插入图片描述

    2、行转列后的数据

    在这里插入图片描述

    3、sql语句

    select name, 
    max(CASE type WHEN '语文' THEN score.score else 0 END) '语文',
    max(CASE type WHEN '数学' THEN score.score else 0 END) '数学',
    max(CASE type WHEN '英语' THEN score.score else 0 END) '英语'
    from score GROUP BY name;
    

    这里使用max函数的原因是因为group by分组,没有max函数的话 他就会查询每个分组的第一个元组,所以max函数是不能少的。

    列转行

    1、初始数据

    在这里插入图片描述

    2、列转行后的数据

    在这里插入图片描述

    3、sql语句

    select id,name, '语文' as course, chinese as score from score01
    UNION ALL
    select id,name, '数学' as course, math as score from score01
    UNION ALL
    select id,name, '英语' as course, english as score from score01
    order by id
    

    全部sql

    ==============================================行转列==============================================
    CREATE TABLE `score` (
      `id` int NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      `type` varchar(255) DEFAULT NULL,
      `score` int DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
    INSERT into score VALUES(1,'张三','语文',70);
    INSERT into score VALUES(2,'张三','数学',80);
    INSERT into score VALUES(3,'张三','英语',90);
    INSERT into score VALUES(4,'李四','语文',50);
    INSERT into score VALUES(5,'李四','数学',60);
    INSERT into score VALUES(6,'李四','英语',80);
    INSERT into score VALUES(7,'王五','语文',60);
    INSERT into score VALUES(8,'王五','数学',90);
    INSERT into score VALUES(9,'王五','英语',80);
    
    select * from score;
    
    select name, 
    max(CASE type WHEN '语文' THEN score.score else 0 END) '语文',
    max(CASE type WHEN '数学' THEN score.score else 0 END) '数学',
    max(CASE type WHEN '英语' THEN score.score else 0 END) '英语'
    from score GROUP BY name;
     
    ==============================================列转行==============================================
    
    CREATE TABLE `score01` (
      `id` int NOT NULL,
      `name` varchar(255) DEFAULT NULL,
      `chinese` int DEFAULT NULL,
      `math` int DEFAULT NULL,
      `english` int DEFAULT NULL,
      PRIMARY KEY (`id`)
    );
    INSERT INTO score01 VALUES(1,'张三',50,60,70);
    INSERT INTO score01 VALUES(2,'李四',80,60,50);
    INSERT INTO score01 VALUES(3,'王五',80,70,60);
    
    select * from score01;
    
    select id,name, '语文' as course, chinese as score from score01
    UNION ALL
    select id,name, '数学' as course, math as score from score01
    UNION ALL
    select id,name, '英语' as course, english as score from score01
    order by id;
    
    展开全文
  • MySQL 行转列与列转行

    2022-03-16 11:15:15
    一、行转列 数据准备 建表: CREATE TABLE `student` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `COURSE` varchar(20) DEFAULT NULL, `SCORE` float DEFAULT '0', ...

    一、行转列

    数据准备

    建表:

    CREATE TABLE `student` (
      `ID` int(10) NOT NULL AUTO_INCREMENT,
      `USER_NAME` varchar(20) DEFAULT NULL,
      `COURSE` varchar(20) DEFAULT NULL,
      `SCORE` float DEFAULT '0',
      PRIMARY KEY (`ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    

    新增数据:

    insert into student(USER_NAME, COURSE, SCORE)  values
    ("张三", "数学", 34),
    ("张三", "语文", 58),
    ("张三", "英语", 58),
    ("李四", "数学", 45),
    ("李四", "语文", 87),
    ("李四", "英语", 45),
    ("王五", "数学", 76),
    ("王五", "语文", 34),
    ("王五", "英语", 89);
    

    源数据:

    行转列图一

    SELECT user_name ,
        MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,
        MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,
        MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语
    FROM student
    GROUP BY USER_NAME;
    

    行转列后:

    行转列图二

    二、列转行

    数据准备

    建表:

    CREATE TABLE `grade` (
      `ID` int(10) NOT NULL AUTO_INCREMENT,
      `USER_NAME` varchar(20) DEFAULT NULL,
      `CN_SCORE` float DEFAULT NULL,
      `MATH_SCORE` float DEFAULT NULL,
      `EN_SCORE` float DEFAULT '0',
      PRIMARY KEY (`ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    新增数据:

    insert into grade(USER_NAME, CN_SCORE, MATH_SCORE, EN_SCORE) values
    ("张三", 34, 58, 58),
    ("李四", 45, 87, 45),
    ("王五", 76, 34, 89);
    

    源数据:

    列转行图一.jpg

    select user_name, '语文' COURSE , CN_SCORE as SCORE from grade
    union select user_name, '数学' COURSE, MATH_SCORE as SCORE from grade
    union select user_name, '英语' COURSE, EN_SCORE as SCORE from grade
    order by user_name,COURSE;
    

    列转行后:

    列转行图二.jpg

    展开全文
  • Mysql 行转列、列转行

    2022-05-11 14:09:02
    Mysql 行转列、列转行

    1. 行转列

    建表语句

    CREATE table student(
    id int(8) primary key auto_increment,
    name varchar(50) default null comment '姓名',
    subject varchar(20)  default null comment '科目',
    score double default 0 comment '分数'
    );

    测试数据


    INSERT into student (name,subject,score) values ('张三','语文',99);
    INSERT into student (name,subject,score) values ('张三','数学',100);
    INSERT into student (name,subject,score) values ('张三','英语',87);
    INSERT into student (name,subject,score) values ('李四','语文',89);
    INSERT into student (name,subject,score) values ('李四','数学',97);
    INSERT into student (name,subject,score) values ('李四','英语',88);

    原始数据查询

    SELECT * from student ;

    行转列SQL语句:

    SELECT name , MAX(CASE subject when '语文' then score else 0 end) as '语文', MAX(CASE subject when '数学' then score else 0 end) as '数学', MAX(CASE subject when '英语' then score else 0 end) as '英语' FROM student group by name;

     2. 列转行

    建表语句

    CREATE table student2(
    id int(8) primary key auto_increment,
    name varchar(50) default null comment '姓名',
    subject1 varchar(20)  default null comment '语文',
    subject2 varchar(20)  default null comment '英语',
    subject3 varchar(20)  default null comment '英语'
    );

    测试数据

    insert into student2 (name,subject1,subject2,subject3) values('张三','99','100','87');
    insert into student2 (name,subject1,subject2,subject3) values('李四','89','97','88');

    原始数据查询

    SELECT * from student2 ;

     

     列转行SQL语句:

    两种方式:

    SELECT name,'语文' as subject , subject1 as score from student2
    UNION 
    SELECT name,'数学' as subject , subject2 as score from student2
    UNION 
    SELECT name,'英语' as subject , subject3 as score from student2 
    order by name ;

    SELECT 
        name ,
        '语文' as subject,
        MAX(subject1) as score
    from
        student2
    group by
        name
    UNION 
    SELECT 
        name ,
        '数学' as subject,
        MAX(subject2) as score
    from
        student2
    group by
        name
    UNION 
    SELECT 
        name ,
        '英语' as subject,
        MAX(subject3) as score
    from
        student2
    group by
        name
    ORDER BY
        name ;

     

    展开全文
  • mysql行转列、列转行示例

    千次阅读 2021-01-28 06:52:53
    最近在开发过程中遇到问题,需要将数据库中一张表信息进行行转列操作,再将每(即每个字段)作为与其他表进行联表查询的字段进行显示。借此机会,在网上查阅了相关方法,现总结出一种比较简单易懂的方法备用。一、...
  • MySql行转列&列转行

    万次阅读 2022-01-09 15:26:38
    行转列: 创建语句: create table test1( id int auto_increment primary key , name varchar(255), course varchar(255), score int ) insert into test1(name,course,score) values ('张三','语文',120); insert...
  • mysql行转列(将同一列下的不同内容的几行数据,转换成几列显示)、列转行、行列汇总、合并显示
  • MySQL中的列转行和行转

    千次阅读 2022-04-05 23:27:56
    在学习sql中遇到了列转行和行转列的题目,这里总结一下如何在对应的情景下解决不同的题目; 列转行 创建一个表stu_score_01: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- --...
  • MySQL 中行转列的方法

    2021-01-19 21:39:10
    MySQL行转列操作  所谓的行转列操作,就是将一个表的行信息转化为信息,说着可能比较笼统,这里先举个例子,如下: +----+-----------+--------+-------+ | ID | USER_NAME | COURSE | SCORE | +----+----------...
  • mysql-行转列、列转行

    2019-08-12 01:36:33
    NULL 博文链接:https://x125858805.iteye.com/blog/2273503
  • MySQL行转列与列转行

    2021-01-18 18:27:52
    行转列数据准备建表:CREATE TABLE `student` (`ID` int(10) NOT NULL AUTO_INCREMENT,`USER_NAME` varchar(20) DEFAULT NULL,`COURSE` varchar(20) DEFAULT NULL,`SCORE` float DEFAULT '0',PRIMARY KEY (`ID`)) ...
  • 行转列 使用union,一行变多行 select temp.uid, temp.column from ( select uid, column1 as column from base_table union select uid, column2 as column from base_table ) temp 列转行 select temp....
  • mysql行转列、列转行

    2022-04-24 16:06:00
    行转列 如下图,有一张成绩表“TEST_TB_GRADE”,每位同学有多个成绩,因此每个同学有多条记录,现想将每位同学的所有成绩展示在同一行上,实现过程如下: 建表语句如下: CREATE TABLE `TEST_TB_GRADE` ( `...
  • 下面小编就为大家带来一篇mysql 列转行的技巧(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • mysql 行转列查询、列转行查询
  • -- 行转列 SELECT user_name , MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学, MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文, MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) ...
  • 版本说明mysql8.0selectname,max(case subject when '语文' then resuilt else 0 end) '语文',max(case subject when '数学' then resuilt else 0 end) '数学',max(case subject when '物理' then resuilt else 0 ...
  • SQL关键字:行转列【union】;列转行【case ...when...then】

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,067
精华内容 1,626
关键字:

mysql行转列和列转行

mysql 订阅