【MySQL】行转列 与 列转行

MYSQL 行转列、列转行、多列转一行、一行转多列 版本说明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 end) '物理'from student group by name大体同case whenselect name,max(if(subjec 阅读详情

行转列

比如说,我们对学生分数字段进行了GROUP BY操作后,需要看这个分数对应的学生分别是谁,就可以使用GROUP_CONCAT函数来行转列

SELECT score, GROUP_CONCAT(student_name) AS '学生名字'
FROM t_student_score
GROUP BY score
score学生名字
90张三,李四,王五
80周大生,王二狗
60李狗蛋

列转行

我们使用GROUP_CONCAT函数转换后的字段,如果还想利用这个字段进行IN查询,那么就需要按,进行拆分。
比如,我们查询出分数一样的同学后,还想要知道分数一样这些同学的平均智商。

错误示例

SELECT score,
(
	-- 计算相同分数学生的平均IQ
	SELECT SUM(iq) / COUNT(*) FROM t_student_iq 
	WHERE student_id IN (t.studentIds)
) AS avgIQ
FROM (
	SELECT score, GROUP_CONCAT(student_id) AS studentIds
	FROM t_student_score
	GROUP BY score
) AS t

错误原因分析:

这里由GROUP_CONCAT函数返回的studentIds是字符串,如:"1,3,5,7"

如果直接用这个字段进行IN查询就变成了:

SELECT SUM(iq) / COUNT(*) FROM t_student_iq 
WHERE student_id IN ("1,3,5,7")

所以我们需要对studentIds进行拆分处理,请看正确示例。

正确示例

SELECT score,
(
	-- 计算相同分数学生的平均IQ
	SELECT SUM(iq) / COUNT(*) FROM t_student_iq 
	WHERE student_id IN (
		SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.studentIds, ',', help_topic_id+1), ',', -1) AS Id FROM mysql.help_topic WHERE help_topic_id  < (LENGTH(t.studentIds) - LENGTH(REPLACE(t.studentIds, ',' , '')) + 1)	
	)
) AS avgIQ
FROM (
	SELECT score, GROUP_CONCAT(student_id) AS studentIds
	FROM t_student_score
	GROUP BY score
) AS t
scoreavgIQ
90100
8096
6086

SQL分析:
这里使用了一句SQL将GROUP_CONCAT函数返回的studentIds进行了拆分转换,

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.studentIds, ',', help_topic_id+1), ',', -1) AS Id 
FROM mysql.help_topic 
WHERE help_topic_id  < (LENGTH(t.studentIds) - LENGTH(REPLACE(t.studentIds, ',' , '')) + 1)	

最终实现了真正的IN查询,即:

SELECT SUM(iq) / COUNT(*) FROM t_student_iq 
WHERE student_id IN (1,3,5,7)

涉及知识点:

  • substring_index 拆分函数
    • substring_index(str, delim, count)
      • str 要处理的字符串
      • delim 分隔符
      • count 计数
  • mysql.help_topic 默认自增序列表
Qt跨平台CAN通信实战:Vector、PCAN与周立功设备统一接口设计 本文针对Qt开发中常见的多品牌CAN设备兼容难题,提出了一套统一的跨平台CAN通信接口设计方案。通过抽象层封装,实现了对Vector、PCAN和周立功设备的统一操作,上层业务代码无需修改即可在不同硬件间切换,有效解决了驱动API差异、环境配置复杂和维护成本高等痛点,显著提升了代码复用率和开发效率。 阅读详情

相关推荐

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 727

搞定mysql的 行转列(7种方法) 和 列转行

一、行转列1、使用case…when…then 2、使用SUM(IF()) 生成列3、使用SUM(IF()) 生成列 + WITH ROLLUP 生成汇总行4、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用子查询5、使用SUM(IF()) 生成列 + UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total6、动态查询列值不确定的情况7、合并字段显示:group_concat()二、列转行 ————————————————即将原本同一列下多行的不同内容作为多个字段,输出对应内容

qq_58148854的博客 5万+

FreeFEM++下载安装和使用

最近要利用机器学习求解一些偏微分方程,对于一些复杂的偏微分方程,需要一些精度比较高的参考解,导师推荐了FreeFEM++软件。首次使用,特此记录一下,以备以后查阅。 1、FreeFEM++简介 FreeFEM是开源的有限元模拟系统,有法国利翁斯实验室、埃尔和玛丽居里大学共同开发,在世界范围内广泛使用。 2、FreeFEM++去何处下载? 下载地址:https://freefem.org/ 点击Download,然后会跳转到 https://github.com/FreeFem/FreeFem-source

夜晓岚的博客 1万+

MySQL数据库行转列,列转行

MySQL数据行转列,列传行

qq_44982110的博客 1万+

基于卷积神经网络的遥感图像地物分类

AI:89-基于卷积神经网络的遥感图像地物分类 基于卷积神经网络的遥感图像地物分类是一个令人兴奋的领域,它在环境监测、城市规划、农业、国防等领域具有广泛的应用。深度学习技术为我们提供了更准确、高效的工具,有望在未来进一步提高分类性能。在本文中,我们探讨了卷积神经网络的工作原理、数据准备、模型构建、训练和评估过程,并提供了多个代码示例。此外,我们讨论了地物分类的应用和挑战,以及未来的发展趋势。

一键难忘的博客 2717

【Python机器学习】零基础掌握TweedieRegressor广义线性回归模型

本次文章主要介绍了如何使用Tweedie回归模型预测电动汽车的实际续航里程。基于车速、气温和驾驶习惯等多种因素,模型能够准确地预测出电动汽车的续航里程,从而为生产商和消费者提供有用的信息。优点总结,Tweedie回归模型在处理具有多元性和高度散布的数据方面表现出色,特别适用于需要考虑多种影响因素的预测任务。优点名称对应描述说明多元性强可以同时处理多种类型和维度的数据高度可定制允许用户自定义损失函数和正则项对异常值鲁棒能够较好地处理数据中的异常值易于解释参数和预测结果都相对容易解释。

Mr数据杨 1004

【SQL】MySQL 数据库的行列转换

  报表系统中经常需要行列转换,在 SQL Server 等数据库中可以用 PIVOT 、UNPIVOT 来实现,但是在 MySQL 数据库中却不支持,下面介绍 MySQL 中的行列转换的实现方法。 1.行转列 例如下面是数据库中的原始表格: name subject score 张三 语文 94 张三 数学 100 张三 英语 90 李四 语文 93 李四 数学 91 李四 英语 99 我们需要得到下面的表格: 姓名 语文 数学 英语 张三 94 1

每天更新大数据面经和技术 1万+

3.PCIe协议分析1-预备知识点

PCIE协议分析1主要讲一下四方面: PCI-E配置空间 PCI-E地址映射 PCI-E Bar空间 PCI-E层级结构详谈 (1)PCIE配置空间 我们过来学习PCIE的同学应该都接触各种类型的功能芯片吧,这些功能芯片连接在电路里面我们可以认为它是一个外部设备,这些设备里面有自己独有的寄存器区域,比如SDRAM里面的ID寄存器或者其他配置寄存器。好的,其实我们PCIE板卡也相当...

一个早起的程序员 4143

SQL 行转列(经典面试题)

MySQL 实现行转列(经典面试题)

qq_42026600的博客 795

我在腾讯上构建了一个人人能用的机载适航知识库

当ChatGPT掀起生成式AI的浪潮时,工程师们发现了一个尴尬的现实:询问“如何编写软件合格审定计划”,AI的回答可能充满似是而非的术语,却无法精确关联FDO-178C的对应内容。现在市面上有许多的AI大模型+适航知识库的方案,之前我的文章介绍了一种本地大模型加知识库的解决方法。此外,ima知识库的容量大小可以到30GB(企鹅大气),只要管理好文件的格式,理论上是完全可以把机载适航相关的内容容纳进去的。后续会不断增加适航法规,适航规章,适航标准,适航书籍,适航相关的论文,以及网上其他一些优秀的内容。

qq_41854911的博客 1223

SAP_MM模块库存概览俄罗斯报表简介

本文介绍了SAP MM模块中"库存概览俄罗斯报表"的功能与应用。该报表主要用于查看物料在不同库存地点和类型的库存情况,并满足俄罗斯当地法规要求。文章解释了"俄罗斯报表"可能指代本地化合规库存报表或客户自定义报表,详细说明了事务代码J3RFLVMOBVEDH的操作步骤,包括公司代码、物料编码、日期范围等查询条件,并解释了报表中各字段含义如期初期末库存数量与价值。最后强调在物料分类账处理完成后使用该报表可获得实际库存价值,为SAP用户提供了实用的库存管理参考。

我小时候很黑的博客 1084

MySQL行转列与列转行原理实现

MySQL行转列与列转行原理实现

七天 749

C#开发的OpenRA游戏之网络接收后找到游戏对象

而这个队列是在创建这个游戏对象时组件,因为一个游戏对象有很多特性,当发现创建游戏对象时有IResolveOrder继承接口的对象,就添加到这个数组。在这里先检查一下命令是否有效的,接着就调用命令的执行对象,即是游戏对象来执行这个命令了。order.Subject就是上面解释游戏对象ID,并从游戏世界里找到的游戏对象,再从各个字段里找到对应的信息,再把这个动作交给游戏世界里的对象执行。从前面分析可知,要找到游戏世界里的对象,就需要游戏对象的ID,因此, 我们来分析游戏对象的ResolveOrder函数。

大坡3D软件开发 1034

MySql行转列与列转行

一.基础 CASE WHEN 语法 IF函数 IF函数用法简单介绍: IF(expresstion,value1,value2),当判断表达式为 true 时,返回 vaule1 的值,当为 false 时,返回 value2 的值。IF()返回一个数字或字符串值,取决于它被使用的上下文。 mysql> select IF(1>2,2,3); -> 3 mysql> select IF(1<2,yes,no);

weixin_44602460的博客 265

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL行转列与列转行

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_INCREM

184

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MySQL行转列与列转行 case when 用法

MySQL行转列与列转行 行转列 例如:把图1转换成图2结果展示 图1    图2   1 2 3 4 5 6 7 CREATE TABLE `TEST_TB_GRADE` (   `ID` int(10) NOT NULL AUTO_INCREMENT,   `USER_NAME`...

qq_41040268的博客 2070

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL的行转列与列转行

行转列与列转行的概念 这里需要重申一下行转列和列转行的区别。有很多的贴子在介绍的时候没有严格的区分,命名介绍的是列转行该如何操作,但是帖子的标题确写的是行转列。自始至终都没有提过列转行的事情。所以,我觉的这里应该有必要做一次区别和认识。 什么是行转列 所谓的行转列是指把数据表中具有相同key值的多行value数据,转换为使用一个key值的多列数据,使每一行数据中,一个key对应多个value。 行转列完成后,在视觉上的效果就是:表中的总行数减少了,但是列数增加了。 如下所示的转换过程就是一个简单的行转列的过

zhao_guo_feng的博客 1663

Mysql查询:行转列与列转行

从表面理解,就是表里存储在行上的数据,在查询结果里展示在列上面。举例说明一下,如果在数据库学生的科目分数是以下面的结构存储:然后在输出查询结果的时候,却希望是这样的:这就是行转列,把原本以行的结构存储的科目,在输出查询结果的时候在列上展示。和行转列刚好相反,从表面理解,就是表里存储在列上的数据,在查询结果里展示在行上面。实际存储结构:行转列、列转行,其实并不是很复杂,实际是运用了一些技巧灵活使用了mysql提供函数、语法。

凡夫编程 1万+

MySQL数据重塑实战:行转列与列转行的高效实现

本文深入解析MySQL数据重塑的核心操作——行转列与列转行。通过学生成绩表等实战案例,详细介绍了使用CASE WHEN/IF配合聚合函数实现静态行转列,以及利用动态SQL应对列不固定的场景。同时,讲解了使用UNION ALL进行列转行的方法,并探讨了GROUP_CONCAT在数据聚合与拆分中的灵活应用,为高效报表生成和数据格式化处理提供实用指南。

weixin_29200741的博客 187

MYSQL行转列与列转行

±-----±-----+ | id| name | ±-----±-----+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | ±-----±-----+ 6 rows in set (0.00 sec)1.以id分组,把name字段的值打印在一行,逗号分隔(默认) ±-----±-------------------+ | id| group_concat(name) | ±-----±-------------------+ |1 |

qq_43380361的博客 684

MySQL 数据转换技巧:列转行与行转列

在处理数据时,我们常常会遇到需要将表中的列(字段)转换为行,或将行转换为列的情况。这种操作通常被称为“列转行”(Pivoting)和“行转列”(Unpivoting)。在 MySQL 中,虽然没有直接提供 PIVOT 和 UNPIVOT 这样的关键字,但我们可以使用其他方法来实现这些功能。本文将向您介绍如何使用 CASE 语句、聚合函数以及 GROUP BY 子句来完成列转行和行转列的操作。

codeMonkey_gxy的博客 1329

mysql 列转行 unpivot_sql的行转列(PIVOT)与列转行(UNPIVOT)

一、行转列1、测试数据准备CREATE TABLE [StudentScores]([UserName] NVARCHAR(20), --学生姓名[Subject] NVARCHAR(30), --科目[Score] FLOAT, --成绩)INSERT INTO [StudentSc...

weixin_35834687的博客 954
上一篇: 【Exception】error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413
下一篇: 【Mybatis】使用 org.apache.ibatis.parsing.PropertyParser 造一个自己的模板引擎
tanpenggood
博客等级 码龄9年 129粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值