mysql查询:行转列与列转行

news2025/1/14 3:41:56

目录

1. 行转列

1.1 什么是行转列

1.2 准备工作

1.3 行转列的实现原理

2. 列转行

2.1 什么是列转行

2.2 准备工作

2.3 列转行的实现原理

3. 总结


1. 行转列

1.1 什么是行转列

        从表面理解,就是表里存储在行上的数据,在查询结果里展示在列上面。举例说明一下,如果在数据库学生的科目分数是以下面的结构存储:

        然后在输出查询结果的时候,却希望是这样的:

        这就是行转列,把原本以行的结构存储的科目,在输出查询结果的时候在列上展示。

1.2 准备工作

#创建学生科目分数表
CREATE TABLE `subject_score` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `subject` varchar(100) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
#插入数据
INSERT INTO subject_score (id, name, subject, score) VALUES(1, '张三', '语文', 96);
INSERT INTO subject_score (id, name, subject, score) VALUES(2, '张三', '数学', 89);
INSERT INTO subject_score (id, name, subject, score) VALUES(3, '张三', '英语', 72);
INSERT INTO subject_score (id, name, subject, score) VALUES(4, '李四', '语文', 76);
INSERT INTO subject_score (id, name, subject, score) VALUES(5, '李四', '数学', 84);
INSERT INTO subject_score (id, name, subject, score) VALUES(6, '李四', '英语', 98);
INSERT INTO subject_score (id, name, subject, score) VALUES(7, '王麻子', '语文', 19);
INSERT INTO subject_score (id, name, subject, score) VALUES(8, '王麻子', '数学', 96);
INSERT INTO subject_score (id, name, subject, score) VALUES(9, '王麻子', '英语', 86);

1.3 行转列的实现原理

        1.使用case when,先把行上数据转化到列上

select
  name,
case when subject = '语文' then score else 0 end   'chinese',
case when subject = '数学' then score else 0 end  'match',
case when subject = '英语' then score else 0 end  'english'
from
subject_score ss;

        2.从执行结果看,每一行数据,有两列都是0,再使用max()函数取最大值,应该就能得到行转列后的效果了。

select
name,
max(case when subject = '语文' then score else 0 end  ) 'chinese',
max(case when subject = '数学' then score else 0 end ) 'match',
max(case when subject = '英语' then score else 0 end ) 'english'
from
subject_score ss
group by
name ;

2. 列转行

2.1 什么是列转行

        和行转列刚好相反,从表面理解,就是表里存储在列上的数据,在查询结果里展示在行上面。

        实际存储结构:

        输出效果:

2.2 准备工作

#创建学生科目分数表
CREATE TABLE `subject_score2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `chinese` varchar(100) DEFAULT NULL,
  `english` varchar(100) DEFAULT NULL,
  `math` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
#插入数据
INSERT INTO subject_score2 (id, name, chinese, english, math) VALUES(1, '张三', '86', '99', '65');
INSERT INTO subject_score2 (id, name, chinese, english, math) VALUES(2, '李四', '98', '36', '75');
INSERT INTO subject_score2 (id, name, chinese, english, math) VALUES(3, '王麻子', '72', '85', '89');

2.3 列转行的实现原理

        列转行的实现原理比较简单,就是把各列拆分成行,最后再各行使用union进行联合查询,就得到了最终想要的结果。

select 
    name,subject,score 
from 
    (select name,'语文' as subject,chinese as score from subject_score2 s1 
        union 
    select name,'英语' as subject ,english as score from subject_score2 s2 
        union 
    select name,'数学' as subject ,math as score from subject_score2 s3 ) s 
order by name asc ;

3. 总结

        行转列、列转行,其实并不是很复杂,实际是运用了一些技巧灵活使用了mysql提供函数、语法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于stm32单片机随机数自动摇号抽奖系统

资料编号:099 下面是相关功能视频演示: 99-基于stm32单片机随机数自动摇号抽奖系统(源码仿真全套资料)采用stm32单片机作为主控,LCD1602显示,通过按键来重置生成随机数,类似于摇号和抽奖系统 …

如何实现广义的元交易(Meta Transaction)

在合约内启用元交易是一个强大的补充。要求用户持有ETH来支付Gas一直以来都是而且仍然是新用户进入的最大挑战之一。如果只是简单的点击,谁知道现在会有多少人在使用以太坊? 但有时,解决方案可以在你的合约中加入元交易能力。实现起来可能比你想象的要容易。 什么是元交易?…

(带你分分种学会linux的文件类型和软硬链接)linxu的文件类型(硬链接和软链接详解)

文章目录一,时区部分1,时区状态的展示2,列出所有时区二,linux的文件类型1,列出目录和文件类型2,查看文件类型和状态并且修改用户密码3,文件类型表4,文件的三次修改时间三,linux的软硬…

记录Manjaro Linux安装nvidia显卡驱动失败的经历

我的Manjaro: 2022.11.19的最新系统,通过manjaro-kde-21.3.7-220816-linux515.iso安装,然后通过pacman -Syyu更新的我的设备: CPU intel 12700H,大小核架构,使用系统默认的linux5.15内核会发现启动firefox浏览器的速度…

LeetCode 142. 环形链表 II

题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/ 思路如下: 用两个指针 fast, slow 同时从起点开始走,fast 每次走两步,slow 每次走一步。 如果过程中 fast 走到 null,则说明不存在环。否则当 fast 和…

基于Python3.6配置开发环境

前言 最近在CTF上遇到了瓶颈,本人不会python,导致有些题做不出来。而且python的实用性实在太强了,所以就找了一个培训机构的课程边学习边实践。现将经验总结,分享给大家。 正文 1、配置python安装路径和环境变量 怎么下载pyth…

【Acwing】最短路+二分 通信线路

340. 通信线路 - AcWing题库 题意: 思路: 首先因为贪心,免费升级的肯定是最贵的那几根 因此这道题可以简化为: 给定一张图,求结点1到结点N的所有路径中第K1大的边权的最小值 可以发现我们要求剩下的边中最大值的最…

Qt程序打包成安装包exe

本章介绍把Qt开发的程序打包成安装包的方法,程序打包成install.exe,可双击安装,有默认安装路径,也可以选择安装目录,自动生成桌面快捷方式和开始菜单选项,可以在操作系统–>设置–>应用程序里看到&am…

【响应式布局】使用 flexbox 实现简单响应式布局

场景和需求 屏幕 > 540px&#xff0c;前两个部分展示两列&#xff0c;屏幕 < 540px&#xff0c;前两个部分展示一列屏幕 < 540px&#xff0c;第一部分要反转展示屏幕 > 769px&#xff0c;第三个部分展示三列屏幕 < 769px&#xff0c;第三个部分展示一列 效果图…

java计算机毕业设计自习室管理系统(附源码、数据库)

java计算机毕业设计自习室管理系统&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

java进阶编程思想(七天)

编程核心思想基本框架第一天&#xff08;继承&#xff09;第二天&#xff08;抽象和接口&#xff09;第四天&#xff08;多态、DATA、Object、正则&#xff09;第五天&#xff08;遍历、Set、斗地主游戏案例&#xff09;第六天第七天b站链接:懂不懂我意思明不明白哈哈哈基本框架…

声明式事务@Transactional

事务 事务管理在 Web 系统开发中是非常重要的&#xff0c;可以在一定程度上保证数据的一致性。Spring提供了非常优秀的事务管理机制&#xff0c;主要分为&#xff1a; 编程式事务声明式事务 编程式事物 在代码中手动的管理事务的提交、回滚等操作&#xff0c;代码侵入性比较…

【毕业设计】66-基于物联网技术的智能家居系统的研究(仿真工程、原理图、低重复率设计文档、答辩PPT)

【毕业设计】66-基于物联网技术的智能家居系统的研究&#xff08;仿真工程、原理图、低重复率设计文档、答辩PPT&#xff09; 文章目录【毕业设计】66-基于物联网技术的智能家居系统的研究&#xff08;仿真工程、原理图、低重复率设计文档、答辩PPT&#xff09;资料下载链接任务…

代码随想录算法训练营第58、59天 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II 42. 接雨水

代码随想录系列文章目录 单调栈篇 文章目录代码随想录系列文章目录739. 每日温度496.下一个更大元素 I503.下一个更大元素II42.接雨水双指针解法dp解法单调栈解法单调栈具体的处理逻辑739. 每日温度 题目链接 暴力解法&#xff0c;双指针&#xff0c;超时, 因为数据长度是100…

【考研复试】计算机专业考研复试英语常见问题一(家庭/家乡/学校篇)

相关链接&#xff1a; 【考研复试】计算机专业考研复试英语常见问题一&#xff08;家庭/家乡/学校篇&#xff09;【考研复试】计算机专业考研复试英语常见问题二&#xff08;研究方向/前沿技术/本科毕设篇&#xff09;【考研复试】计算机专业考研复试英语常见问题三&#xff0…

Spring Boot+Vue3前后端分离实战wiki知识库系统之用户管理单点登录

用户表设计与代码生成 用户表设计 生成持久层代码 同样是在gennerator.xml中添加并执行&#xff1a; 完成用户表基本增删查改功能 首先我们应该改造controller 接着是service,service的查询条件要根据loginname来查找&#xff1a; 接着修改三个实体&#xff1a; 注…

Windows OpenGL 图像单色

目录 一.OpenGL 图像单色 1.原始图片2.效果演示 二.OpenGL 图像单色源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习…

基于stm32单片机的电压报警系统Proteus仿真

资料编号&#xff1a;112 下面是相关功能视频演示&#xff1a; 112-基于stm32单片机的电压报警系统Proteus仿真&#xff08;源码仿真全套资料&#xff09;功能介绍&#xff1a; 采用stm32单片机的12位ADC采集电压&#xff0c;当电压值超过设置值蜂鸣器和LED产生报警&#xff…

知识蒸馏 | YOLOv7知识蒸馏实战篇 | 2/2*

知识蒸馏 | YOLOv7知识蒸馏实战篇 | 2/2* 文章目录 知识蒸馏 | YOLOv7知识蒸馏实战篇 | 2/2*0. 环境准备1. 训练学生网络2. 训练教师网络3. 知识蒸馏训练4. YOLOv7官方项目修改说明5. 源码0. 环境准备 终端键入: pip install -r requirements.txt -i https://pypi.tuna.tsin…

11.19 - 每日一题 - 408

每日一句&#xff1a;人生难得几回搏&#xff0c;此时不搏待何时。 数据结构 1 在下列叙述中&#xff0c;正确的叙述是______ A.树的先序遍历和中序遍历可以得到树的后序遍历B.将一棵树转换成二叉树后&#xff0c;根结点没有右子树C.采用二叉链表作存储结构&#xff0c;树的…