当前位置: 首页 > article >正文

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

一、行转列1、使用case…when…then2、使用SUM(IF()) 生成列3、使用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行4、使用SUM(IF()) 生成列直接生成汇总结果不再利用子查询5、使用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total6、动态查询列值不确定的情况7、合并字段显示group_concat()二、列转行————————————————一、行转列即将原本同一列下多行的不同内容作为多个字段输出对应内容。建表语句DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT 用户id, subject VARCHAR(20) COMMENT 科目, score DOUBLE COMMENT 成绩, PRIMARY KEY(id) )ENGINE INNODB DEFAULT CHARSET utf8;插入数据INSERT INTO tb_score(userid,subject,score) VALUES (001,语文,90); INSERT INTO tb_score(userid,subject,score) VALUES (001,数学,92); INSERT INTO tb_score(userid,subject,score) VALUES (001,英语,80); INSERT INTO tb_score(userid,subject,score) VALUES (002,语文,88); INSERT INTO tb_score(userid,subject,score) VALUES (002,数学,90); INSERT INTO tb_score(userid,subject,score) VALUES (002,英语,75.5); INSERT INTO tb_score(userid,subject,score) VALUES (003,语文,70); INSERT INTO tb_score(userid,subject,score) VALUES (003,数学,85); INSERT INTO tb_score(userid,subject,score) VALUES (003,英语,90); INSERT INTO tb_score(userid,subject,score) VALUES (003,政治,82);查询数据表中的内容即转换前的结果SELECT * FROM tb_score先来看一下转换后的结果可以看出这里行转列是将原来的subject字段的多行内容选出来作为结果集中的不同列并根据userid进行分组显示对应的score。1、使用case…when…then 进行行转列SELECT userid, SUM(CASE subject WHEN 语文 THEN score ELSE 0 END) as 语文, SUM(CASE subject WHEN 数学 THEN score ELSE 0 END) as 数学, SUM(CASE subject WHEN 英语 THEN score ELSE 0 END) as 英语, SUM(CASE subject WHEN 政治 THEN score ELSE 0 END) as 政治 FROM tb_score GROUP BY userid2、使用IF() 进行行转列SELECT userid, SUM(IF(subject语文,score,0)) as 语文, SUM(IF(subject数学,score,0)) as 数学, SUM(IF(subject英语,score,0)) as 英语, SUM(IF(subject政治,score,0)) as 政治 FROM tb_score GROUP BY userid注意点1SUM() 是为了能够使用GROUP BY根据userid进行分组因为每一个userid对应的subject语文的记录只有一条所以SUM() 的值就等于对应那一条记录的score的值。假如userid ‘001’ and subject‘语文’ 的记录有两条则此时SUM() 的值将会是这两条记录的和同理使用Max()的值将会是这两条记录里面值最大的一个。但是正常情况下一个user对应一个subject只有一个分数因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函数都可以达到行转列的效果。2IF(subject‘语文’,score,0) 作为条件即对所有subject语文’的记录的score字段进行SUM()、MAX()、MIN()、AVG()操作如果score没有值则默认为0。3、利用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行,并利用 IFNULL将汇总行标题显示为TotalSELECT IFNULL(userid,total) AS userid, SUM(IF(subject语文,score,0)) AS 语文, SUM(IF(subject数学,score,0)) AS 数学, SUM(IF(subject英语,score,0)) AS 英语, SUM(IF(subject政治,score,0)) AS 政治, SUM(IF(subjecttotal,score,0)) AS total FROM( SELECT userid,IFNULL(subject,total) AS subject,SUM(score) AS score FROM tb_score GROUP BY userid,subject WITH ROLLUP HAVING userid IS NOT NULL )AS A GROUP BY userid WITH ROLLUP;运行结果4、利用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 TotalSELECT userid, SUM(IF(subject语文,score,0)) AS 语文, SUM(IF(subject数学,score,0)) AS 数学, SUM(IF(subject英语,score,0)) AS 英语, SUM(IF(subject政治,score,0)) AS 政治, SUM(score) AS TOTAL FROM tb_score GROUP BY userid UNION SELECT TOTAL,SUM(IF(subject语文,score,0)) AS 语文, SUM(IF(subject数学,score,0)) AS 数学, SUM(IF(subject英语,score,0)) AS 英语, SUM(IF(subject政治,score,0)) AS 政治, SUM(score) FROM tb_score运行结果5、利用SUM(IF()) 生成列直接生成结果不再利用子查询SELECT IFNULL(userid,TOTAL) AS userid, SUM(IF(subject语文,score,0)) AS 语文, SUM(IF(subject数学,score,0)) AS 数学, SUM(IF(subject英语,score,0)) AS 英语, SUM(IF(subject政治,score,0)) AS 政治, SUM(score) AS TOTAL FROM tb_score GROUP BY userid WITH ROLLUP;运行结果6、动态适用于列不确定情况SET EE; select EE :CONCAT(EE,sum(if(subject ,subject,,score,0)) as ,subject, ,) AS aa FROM (SELECT DISTINCT subject FROM tb_score) A ; SET QQ CONCAT(select ifnull(userid,TOTAL)as userid,,EE, sum(score) as TOTAL from tb_score group by userid WITH ROLLUP); -- SELECT QQ; PREPARE stmt FROM QQ; EXECUTE stmt; DEALLOCATE PREPARE stmt;运行结果7、合并字段显示利用group_concat()SELECT userid,GROUP_CONCAT(subject,:,score)AS 成绩 FROM tb_score GROUP BY userid运行结果group_concat()手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。比较抽象难以理解。通俗点理解其实是这样的group_concat()会计算哪些行属于同一组将属于同一组的列显示出来。要返回哪些列由函数参数(就是字段名)决定。分组必须有个标准就是根据group by指定的列进行分组。结论group_concat()函数可以很好的建属于同一分组的多个行转化为一个列。二、列转行建表语句CREATE TABLE tb_score1( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT 用户id, cn_score DOUBLE COMMENT 语文成绩, math_score DOUBLE COMMENT 数学成绩, en_score DOUBLE COMMENT 英语成绩, po_score DOUBLE COMMENT 政治成绩, PRIMARY KEY(id) )ENGINE INNODB DEFAULT CHARSET utf8;插入数据INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES (001,90,92,80,0); INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES (002,88,90,75.5,0); INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES (003,70,85,90,82);查询数据表中的内容即转换前的结果SELECT * FROM tb_score1转换后本质是将userid的每个科目分数分散成一条记录显示出来。直接上SQLSELECT userid,语文 AS course,cn_score AS score FROM tb_score1 UNION ALL SELECT userid,数学 AS course,math_score AS score FROM tb_score1 UNION ALL SELECT userid,英语 AS course,en_score AS score FROM tb_score1 UNION ALL SELECT userid,政治 AS course,po_score AS score FROM tb_score1 ORDER BY userid这里将每个userid对应的多个科目的成绩查出来通过UNION ALL将结果集加起来达到上图的效果。

相关文章:

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

一、行转列 1、使用case…when…then 2、使用SUM(IF()) 生成列 3、使用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行 4、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用子查询 5、使用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题显示…...

免费的论文在线查重软件,我用过最好的其实是它

去年春天,论文初稿刚写完,我忐忑地点开一个号称“永久免费”的查重网站。上传、等待、结果弹出——重复率4%。我差点从椅子上跳起来,觉得自己简直是写作天才。一周后,学校知网查重结果出来:31%。那一刻我盯着屏幕&…...

千问3.5-27B惊艳图文效果:商品图识别、图表数据提取、截图问答集锦

千问3.5-27B惊艳图文效果:商品图识别、图表数据提取、截图问答集锦 最近,一个能“看懂”图片的AI模型在开发者圈子里火了起来。它不仅能和你聊天,还能像人一样,对着你上传的图片,告诉你里面有什么、数据是多少、甚至帮…...

AudioSeal Pixel Studio部署案例:GPU加速下秒级音频指纹检测实操

AudioSeal Pixel Studio部署案例:GPU加速下秒级音频指纹检测实操 1. 专业级音频水印工具介绍 AudioSeal Pixel Studio 是一款基于Meta开源的AudioSeal算法构建的音频保护与检测工具。它能在几乎不损失音质的情况下,为音频织入隐形的数字水印&#xff0…...

Qwen All-in-One效果对比:与传统多模型方案相比优势在哪

Qwen All-in-One效果对比:与传统多模型方案相比优势在哪 1. 传统多模型方案的痛点分析 在AI服务部署领域,传统"多模型堆叠"架构长期占据主导地位。这种方案通常为每个独立任务部署专用模型,例如使用BERT处理情感分析、LLM负责对话…...

开源字体跨平台安装极简教程:得意黑Smiley Sans零门槛部署指南

开源字体跨平台安装极简教程:得意黑Smiley Sans零门槛部署指南 【免费下载链接】smiley-sans 得意黑 Smiley Sans:一款在人文观感和几何特征中寻找平衡的中文黑体 项目地址: https://gitcode.com/gh_mirrors/smi/smiley-sans 开源字体安装是提升设…...

F3D在Windows平台的高效应用指南:从安装到性能优化

F3D在Windows平台的高效应用指南:从安装到性能优化 【免费下载链接】f3d Fast and minimalist 3D viewer. 项目地址: https://gitcode.com/GitHub_Trending/f3/f3d 解决3D查看器的性能与兼容性难题 在Windows环境下处理3D模型时,你是否经常遇到加…...

Python3.10镜像解决环境难题:一键创建独立Python开发空间

Python3.10镜像解决环境难题:一键创建独立Python开发空间 你是不是也遇到过这样的场景? 想在自己的电脑上跑一个开源项目,结果光是配环境就花了大半天。好不容易装好了Python,又发现项目依赖的某个库版本和你系统里已有的冲突&a…...

逸仙电商获1.2亿美元战略投资:股票上涨10% 黄锦峰与信宸资本是认购方

雷递网 乐天 3月12日完美日记母公司逸仙电商(NYSE: YSG)今日发布公告称,公司拟通过私募方式发行总额为1.2亿美元的以人民币计价的可转换优先票据(简称“可转债”)。据公告披露,本次可转债交易将分两期等额发…...

开源微米级轮廓仪:基于粘-滑压电定位与树莓派Pico 2的亚微米形貌测量系统

1. 项目概述微米级轮廓仪(Micro-Profilometer)是一种面向微纳尺度表面形貌表征的开源硬件系统,其核心目标是构建一套成本可控、性能明确、可复现性强的表面轮廓测量平台。该系统并非商用仪器的简化替代品,而是以工程实践为导向&am…...

CLIP-GmP-ViT-L-14步骤详解:Gradio界面添加下载按钮导出匹配结果

CLIP-GmP-ViT-L-14步骤详解:Gradio界面添加下载按钮导出匹配结果 如果你用过CLIP模型来匹配图片和文字,可能会遇到一个问题:计算出的相似度分数,只能看,不能存。每次都得手动截图或者复制粘贴,特别麻烦。今…...

LingBot-Depth在具身智能中的应用:机器人视觉感知实战

LingBot-Depth在具身智能中的应用:机器人视觉感知实战 你有没有想过,为什么很多家用扫地机器人总会在深色地毯前犹豫不决,或者在透明玻璃门前“撞墙”?这背后其实是一个共同的视觉感知难题——深度估计不准。传统的深度传感器在复…...

VR-Reversal:释放3D视频潜力的跨设备解决方案

VR-Reversal:释放3D视频潜力的跨设备解决方案 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_mirrors/vr…...

WuliArt Qwen-Image Turbo功能详解:BF16防黑图、VAE分块解码都是啥?

WuliArt Qwen-Image Turbo功能详解:BF16防黑图、VAE分块解码都是啥? 1. 为什么这款文生图工具值得关注? 你有没有遇到过这样的情况:在本地运行文生图模型时,等待几分钟后只得到一张全黑的图片?或者生成的…...

Formula-Editor:跨平台数学公式高效解决方案

Formula-Editor:跨平台数学公式高效解决方案 【免费下载链接】Formula-Editor 基于百度kityformula-editor的公式编辑器 项目地址: https://gitcode.com/gh_mirrors/fo/Formula-Editor 在学术研究、教育教学和技术文档创作过程中,数学公式的编辑往…...

DeEAR语音情感分析教程:基于DeEAR输出构建‘语音情感健康度’综合评分模型

DeEAR语音情感分析教程:基于DeEAR输出构建‘语音情感健康度’综合评分模型 1. 引言:从听懂到读懂,让AI理解你的声音情绪 你有没有想过,你说话时的声音,除了传递文字信息,还藏着多少情绪的秘密&#xff1f…...

AudioSeal从零开始:无需Python环境,纯shell脚本启动全流程

AudioSeal从零开始:无需Python环境,纯shell脚本启动全流程 你是不是遇到过这种情况?在网上听到一段AI生成的语音,真假难辨,想确认它的来源却无从下手。或者,你创作了一段音频内容,担心被别人盗…...

零基础玩转AI绘画:Qwen-Image-2512+ComfyUI保姆级部署教程

零基础玩转AI绘画:Qwen-Image-2512ComfyUI保姆级部署教程 1. 前言:为什么选择Qwen-Image-2512? 如果你对AI绘画感兴趣但苦于复杂的部署流程,Qwen-Image-2512-ComfyUI镜像绝对是你的理想选择。这个由阿里开源的最新图像生成模型&…...

Qwen2.5-VL-7B-Instruct效果对比:不同分辨率输入对图文理解精度影响实测

Qwen2.5-VL-7B-Instruct效果对比:不同分辨率输入对图文理解精度影响实测 1. 测试背景与目的 Qwen2.5-VL-7B-Instruct作为新一代多模态视觉-语言模型,在图文理解任务中展现出强大能力。但在实际应用中,我们发现输入图像的分辨率会显著影响模…...

PP-DocLayoutV3效果实测:上传文档图片,秒级输出彩色标注框

PP-DocLayoutV3效果实测:上传文档图片,秒级输出彩色标注框 你有没有遇到过这样的场景?面对一堆扫描的合同、发票或者论文,想要快速提取里面的文字和表格,结果发现传统的OCR工具把标题、正文、表格全都混在一起&#x…...

双MCU两轴卫星跟踪云台:IMU姿态解算与PID运动控制实现

1. 项目概述两轴卫星跟踪云台是一种面向无线电通信、射电天文观测及业余卫星接收场景的机电一体化设备,其核心任务是实时驱动天线系统精确指向运动中的低轨卫星(LEO),以维持稳定的信号链路。本项目采用双主控协同架构:…...

Chord工具高级技巧:视频数据的高效压缩与存储

Chord工具高级技巧:视频数据的高效压缩与存储 1. 引言 视频数据正以前所未有的速度增长,从监控摄像头到社交媒体内容,从在线教育到工业检测,高清视频的存储和传输成本已经成为许多企业和开发者面临的实际挑战。一个小时的1080p视…...

Qwen2.5-VL-7B-Instruct开源模型部署教程:GPTQ量化模型免编译高效加载

Qwen2.5-VL-7B-Instruct开源模型部署教程:GPTQ量化模型免编译高效加载 想试试让AI看懂图片并和你聊天吗?今天要介绍的Qwen2.5-VL-7B-Instruct就是一个能“看图说话”的多模态模型。它不仅能理解你上传的图片内容,还能根据图片和你进行智能对…...

基于Wan2.1-umt5的AIGC内容安全审核系统实战

基于Wan2.1-umt5的AIGC内容安全审核系统实战 最近和几个做内容平台的朋友聊天,大家不约而同地提到了同一个头疼的问题:用户用AI生成的内容越来越多了,速度快、花样多,但内容质量参差不齐,时不时就会冒出一些不合规、有…...

Phi-4-reasoning-vision-15BGPU算力优化:通过reasoning_mode控制计算深度降本30%

Phi-4-reasoning-vision-15B GPU算力优化:通过reasoning_mode控制计算深度降本30% 1. 模型概述 Phi-4-reasoning-vision-15B是微软推出的视觉多模态推理模型,专注于图像理解和复杂视觉推理任务。该模型支持多种视觉场景处理,包括&#xff1…...

EcomGPT-7B电商大模型数据库课程设计:智能商品知识库构建

EcomGPT-7B电商大模型数据库课程设计:智能商品知识库构建 如果你正在为数据库课程设计寻找一个既有技术深度又有实际应用价值的项目,那么今天聊的这个“智能商品知识库”或许能给你带来不少灵感。传统的电商数据库课程设计,往往停留在建表、…...

Qwen3-TTS-12Hz-1.7B-Base效果实测:葡萄牙语巴西俚语语音生成能力

Qwen3-TTS-12Hz-1.7B-Base效果实测:葡萄牙语巴西俚语语音生成能力 你有没有试过让AI说出“Cara, t de brincadeira?!”——那种带着夸张语气、拖着尾音、还带点街头感的巴西葡语?不是教科书里的标准发音,而是里约热内卢小摊主招呼熟客时的真…...

如何利用Unity实时调试工具提升开发效率

如何利用Unity实时调试工具提升开发效率 【免费下载链接】RuntimeUnityEditor In-game inspector and debugging tools for applications made with Unity3D game engine 项目地址: https://gitcode.com/gh_mirrors/ru/RuntimeUnityEditor Unity实时调试是游戏开发过程中…...

5分钟上手SiameseAOE:中文评论情感分析零基础教程

5分钟上手SiameseAOE:中文评论情感分析零基础教程 1. 从零开始:什么是SiameseAOE? 想象一下,你是一家电商公司的运营,每天面对成千上万条用户评论:“手机拍照效果很棒,但电池续航太差了”、“…...

Stable Yogi 模型算法优化浅谈:从YOLOv8目标检测中汲取的灵感

Stable Yogi 模型算法优化浅谈:从YOLOv8目标检测中汲取的灵感 最近在琢磨生成模型优化时,我偶然翻看了一些目标检测领域的论文,特别是YOLOv8。一个有趣的想法冒了出来:那些在目标检测任务上被验证高效的“武功秘籍”,…...