iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >学习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://www.lsjlt.com/news/139647.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 学习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 行转列
    以下是其中比较常见的几种方法: 使用GROUP_CONCAT函数 可以使用GROUP_CONCAT函数将多行数据合并为一行,并以逗号或其他分隔符进行分隔。通过SELECT语句和GROUP BY子句,可以将数据行转换为列。具体语法如下...
    99+
    2023-08-20
    mysql 数据库 sql
  • mysql 列转行
    一、列转行 mysql 数据库中,我们可能遇到将数据库中某一列的数据(多个值,按照英文逗号分隔),转化为多行数据(即一行转多行),然后join关联表,再转化为一行数据 如:有两张表,一用户表,一张学科表,需要查询学科表中的用户姓名 用...
    99+
    2023-08-31
    mysql 数据库 sql
  • postgresql行转列与列转行图文教程
    目录列转行行转列总结列转行 PostgreSQL列转行的思路主要是利用string_to_array进行数组转换,然后用unnest进行行拆分 select t.bid_unit,unit_id from u...
    99+
    2023-06-11
    postgresql行转列 postgresql列转行
  • SQL如何实现行转列和列转行
    这篇文章给大家分享的是有关SQL如何实现行转列和列转行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005...
    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中列转行和行转列总结解决思路
    目录引言列转行行转列总结引言 在学习sql中遇到了列转行和行转列的题目,这里总结一下如何在对应的情景下解决不同的题目; 列转行 创建一个表stu_score_01: SET NAMES utf8mb4; SET FORE...
    99+
    2023-01-30
    MySQL列转行和行转列 MySQL列转行 MySQL行转列
  • Pandas.DataFrame行和列如何转置
    本篇内容主要讲解“Pandas.DataFrame行和列如何转置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pandas.DataFrame行和列如何转置”吧!如果要交换(转置)pandas....
    99+
    2023-07-05
  • 如何进行SQL中PIVOT行列转换
    这篇文章主要讲解了“如何进行SQL中PIVOT行列转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何进行SQL中PIVOT行列转换”吧!PIVOT通过将...
    99+
    2024-04-02
  • java9学习系列之在docker中如何运行java9
    前言本文将给大家详细介绍下如何在docker中运行java9的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。镜像docker pull openjdk:9-jdk...
    99+
    2023-05-31
    docker 运行 java9
  • mysql行数据转为列数据
    最近在开发过程中遇到问题,需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示。 借此机会,在网上查阅了相关方法,现总结出一种比较简单易懂的方法备用。 ...
    99+
    2023-09-02
    mysql oracle 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作