返回顶部
首页 > 资讯 > 数据库 >学习mysql 如何行转列与列传行
  • 665
分享到

学习mysql 如何行转列与列传行

2024-04-02 19:04:59 665人浏览 泡泡鱼
摘要

目录一、行转列—case+groupby二、列转行——uNIOn一、行转列— case+group by Mysql>

一、行转列— case+group by

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 |
+-----------+--------+--------+--------+

二、列转行——union

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 行转列与列传行的文章就介绍到这了,更多相关mysql 行转列与列传行内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 学习mysql 如何行转列与列传行

本文链接: https://lsjlt.com/news/139647.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 学习mysql 如何行转列与列传行
    目录一、行转列—case+groupby二、列转行——union一、行转列— case+group by mysql>...
    99+
    2024-04-02
  • Mysql学习——行与列的多种转换
    目录 一、行转列 二、列转行 三、多列转一行 四、一行转多列 五、行转列的其案例 首先准备一张表 CREATE TABLE CJ( Name varchar(32), Subject varchar(...
    99+
    2023-09-01
    sql 数据库
  • Oracle——行转列与列转行
    文章目录 行转列创建表和增加测试数据方式一:先分组,再统计平铺方式二:使用Oracle11g自带函数PIVOT实现 列转行创建表和增加测试数据方式一:union all 单个合并...
    99+
    2023-09-02
    oracle 数据库 mysql
  • SQL行转列与列转行详情
    1.数据集 +---+----------+ |id |login_date| +---+----------+ |01 |2021-02-28| |01 |2021-03-01| ...
    99+
    2024-04-02
  • SQL行转列与列转行的方法
    本文小编为大家详细介绍“SQL行转列与列转行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL行转列与列转行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数据集+---+----------+|i...
    99+
    2023-06-29
  • mysql 列转行
    一、列转行 mysql 数据库中,我们可能遇到将数据库中某一列的数据(多个值,按照英文逗号分隔),转化为多行数据(即一行转多行),然后join关联表,再转化为一行数据 如:有两张表,一用户表,一张学科表,需要查询学科表中的用户姓名 用...
    99+
    2023-08-31
    mysql 数据库 sql
  • mysql 行转列
    以下是其中比较常见的几种方法: 使用GROUP_CONCAT函数 可以使用GROUP_CONCAT函数将多行数据合并为一行,并以逗号或其他分隔符进行分隔。通过SELECT语句和GROUP BY子句,可以将数据行转换为列。具体语法如下...
    99+
    2023-08-20
    mysql 数据库 sql
  • SQL如何实现行转列和列转行
    这篇文章给大家分享的是有关SQL如何实现行转列和列转行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005...
    99+
    2024-04-02
  • postgresql行转列与列转行图文教程
    目录列转行行转列总结列转行 PostgreSQL列转行的思路主要是利用string_to_array进行数组转换,然后用unnest进行行拆分 select t.bid_unit,unit_id from u...
    99+
    2023-06-11
    postgresql行转列 postgresql列转行
  • 如何实现mysql行转列
    下面一起来了解下如何实现mysql行转列,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何实现mysql行转列这篇短内容是你想要的。 原始数据如下:mysql> select ...
    99+
    2024-04-02
  • mysql的行如何转为列
    这篇“mysql的行如何转为列”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql的行...
    99+
    2024-04-02
  • MySQL中的经典面试题——行转列(列转行)
    目录 1、简介:   1. 行转列(Pivot): 2. 列转行(Unpivot): 2、行转列,列转行的思想 3、实现 3.1、实现行转列 3.2、总结(行转列)实现的两种方法   3.3、实现(列转行)  3.4、...
    99+
    2023-10-01
    mysql 数据库 sql
  • mysql行转列和列转行的方法是什么
    在MySQL中,行转列和列转行通常使用以下方法来实现: 使用聚合函数和CASE语句进行行转列操作: SELECT ...
    99+
    2024-04-09
    mysql
  • pandas如何优雅的列转行及行转列详解
    目录一、列转行1、背景描述2.方法描述2.1 方法12.2 方法22.3 方法32.4 方法43 思考与总结4 思维延伸4.1 例子14.2 例子2二、行转列1.准备数据2.行转列实...
    99+
    2024-04-02
  • Mysql行转列函数
    group_concat() 例: select oid from Test;  select group_concat(oid) from Test; 来源地址:https://blog.csd...
    99+
    2023-09-02
    mysql sql mybatis
  • MySQL行转列详情
    目录一、行转列SQL写法二、如果领导@你,让你在结果集中加上总数列呢?三、领导又双叒叕@你改需求四、结束语附录:创建表结构&测试数据SQL  MySQL行...
    99+
    2024-04-02
  • 一文弄懂MYSQL如何列转行
    目录一、需求:二、如何实现1)首先看我们的静态SQL2)那么就有人问了,如果我有100门课程不是要写100次名称,这也太麻烦了?3)这样每次都写一长串sql也很麻烦?总结一、需求: 有三张表,学生表、成绩表和课程表,我们...
    99+
    2022-06-16
    mysql列转行逗号隔开 mysql列转行sql mysql行列转换函数
  • MySQL中列转行和行转列总结解决思路
    目录引言列转行行转列总结引言 在学习sql中遇到了列转行和行转列的题目,这里总结一下如何在对应的情景下解决不同的题目; 列转行 创建一个表stu_score_01: SET NAMES utf8mb4; SET FORE...
    99+
    2023-01-30
    MySQL列转行和行转列 MySQL列转行 MySQL行转列
  • MySQL实验--静态行转列->动态行转列->存储过程使用行转列
    概述 今天主要用一个实验来介绍一下在使用行转列的过程及相关实验。下面演示一下。 创建表 这里我用一个比较简单的例子来说明,也是行转列的经典例子,就是学生的成绩三张表:学生表、课程表、成绩表 1、学生表 就简单一点,学生学号...
    99+
    2016-08-19
    MySQL实验--静态行转列->动态行转列->存储过程使用行转列
  • MySQL实现行列转换
    实际应用中,会遇到需要把表的某些行转换成列,或者把列转换成行的情况。比如一张表在数据库中是这样的: 图1 但是,需要的结果可能是这样: 图2 这个时候就得行列转换了。 1.行转列的几种方法 1.1 case... w...
    99+
    2022-07-08
    MySQL 行列转换
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作