mysql-sql练习-5-行列互转

news2025/1/12 12:01:52

目录

成绩单 简单互转

需求

多行转多列 分组 判断 聚合

理解 分组 合并

逆向需求 多列转多行 输出 合并

abc 去重 合并 拆分

需求

建表

多行转多列

逆向需求 多列转多行

拆分 按长度

拆分 按个数


成绩单 简单互转

需求

多行转多列 分组 判断 聚合

with tmp as(-- 分组,只输出语文 其他是0 ==> 条件判断,聚合
  select
    s_id,
    sum(if(c_id = '01',score,0)) '语文01',
    sum(if(c_id = '02',score,0)) '数学02',
    max(if(c_id = '03',score,0)) '英语03',
    sum(score) sum_score
  from score
  group by s_id
)
select -- 输出格式
  *,
  dense_rank() over(order by sum_score desc) dr -- 窗口范围 0-当前行
from tmp;

理解 分组 合并

select
  s_id, -- 分组:右侧括号图 多行
  group_concat(c_id) c_id, -- 多行合并成一行字符串 有空则空
  group_concat(score) score,
  group_concat(if(c_id = '01',score,0)) '语文01',
  group_concat(if(c_id = '01',score,0)) '数学02',
  group_concat(if(c_id = '01',score,0)) '英语03'
from score
group by s_id;

逆向需求 多列转多行 输出 合并

with tmp as(
  with tmp as(-- 分组:右侧括号图,只输出语文 其他是0 ==> 条件判断,聚合
    select
      s_id,
      sum(if(c_id = '01',score,0)) '语文01',
      sum(if(c_id = '02',score,0)) '数学02',
      max(if(c_id = '03',score,0)) '英语03',
      sum(score) sum_score
    from score
    group by s_id
  )
  select -- 输出格式
    *,
    dense_rank() over(order by sum_score desc) dr -- 窗口范围 0-当前行
  from tmp
)
select s_id,'01' c_id,语文01 score from tmp union -- 输出需要的列 合并
select s_id,'02' c_id,数学02 score from tmp union
select s_id,'03' c_id,英语03 score from tmp;

abc 去重 合并 拆分

需求

        

建表

create table abc(
	a int comment '年份',
	b varchar(2) comment '字母',
	c int comment '整数'
) comment '行列互转 合并拆分';

insert into abc
values
	('2014','A',10),
	('2014','B',9),
	('2014','B',6),
	('2015','A',8),
	('2015','B',7);
select * from abc;

多行转多列

with tmp as(-- b去重
  select
    a,b,group_concat(c) c
  from abc
  group by a,b
)
select
  a,
  sum(if(b = 'A',c,0)) col_A,
  max(if(b = 'B',c,0)) col_B  -- 字符串和整数聚合 只能max
from tmp
group by a;

逆向需求 多列转多行

拆分 按长度

with tmp as(-- 作为初始表
  with tmp as(
    select
      a,b,group_concat(c) c
    from abc
    group by a,b
  )
  select
    a,
    sum(if(b = 'A',c,0)) col_A,
    max(if(b = 'B',c,0)) col_B  -- 字符串和整数聚合 只能max
  from tmp
  group by a
)
select a,'A' b,col_A c from tmp union -- 输出需要的列 重命名
select a,'B' b,substring(col_B,1,1) c from tmp union -- 去重
select a,'B' b,substring(col_B,-1,1) c from tmp
order by a;

拆分 按个数

with tmp as(-- 作为初始表
  with tmp as(
    select
      a,b,group_concat(c) c
    from abc
    group by a,b
  )
  select
    a,
    sum(if(b = 'A',c,0)) col_A,
    max(if(b = 'B',c,0)) col_B  -- 字符串和整数聚合 只能max
  from tmp
  group by a
)
select a,'A' b,col_A c from tmp union
select a,'B' b,substring_index(col_B,',',1) c from tmp union
select a,'B' b,substring_index(col_B,',',-1) c from tmp
order by a;

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

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

相关文章

Ubuntu 24.04 LTS (Noble Numbat) 正式版发布

Ubuntu 24.04 LTS (Noble Numbat) 正式版发布 Canonical 的第 10 个长期支持版本在性能工程、企业安全和开发人员体验方面树立了新标准 请访问原文链接:Ubuntu 24.04 LTS (Noble Numbat) 正式版发布,查看最新版。原创作品,转载请保留出处。…

带环链表及例题

环形链表,链表中的尾节点指向链表中的某个节点导致形成循环的链表。 通过图可以这样表示。 我们一般采用快慢指针的方式解决带环链表的题目,下面直接上例题 环形链表 力扣链接: . - 力扣(LeetCode) 让我们判断一个…

38 线程互斥

目录 1.问题 2.互斥相关概念 3.互斥量 4.互斥量接口 5.修改买票代码 6.互斥量原理 7.锁的封装 8.可重入和线程安全 1. 问题 用一个模拟抢票过程的程序引出本节话题,如果有1000张票,设为全局变量,生成3个线程每隔一秒抢一张票,如…

奥比中光Astra RGBD ROS1配置(乐视RGBD)

早年买了一款乐视RGBD一直落灰,最近做一个机器人项目想重新使用起来。发现官方给的RGBD包和github上面的ros_astra_camera包并不能很好的驱动这款相机。研究了一下进行补足。 最终的结果是彩色,红外以及深度退昂均能实时读取。具体过程如下: …

【LeetCode】---剑指Offer 31.栈的弹出压入序列

一、题目描述: 二、算法原理: 核心思想: 入栈的栈顶元素跟出栈序列进行匹配,入一个匹配一个。注意:结束的标志就是入栈序列走完了。 三、代码实现: class Solution { public:/*** 代码中的类名、方法名、…

每天五分钟深度学习:如何理解梯度下降算法可以逼近全局最小值?

本文重点 上节课程中,我们已经知道了逻辑回归的代价函数J。要想最小化代价函数,我们需要使用梯度下降算法。 梯度下降算法地直观理解: 为了可视化,我们假设w和b都是单一实数,实际上,w可以是更高地维度。 代价函数J是在水平轴w和b上的曲面,因此曲面的高度就是J(w,b)在…

低功耗数字IC后端设计实现典型案例| UPF Flow如何避免工具乱用Always On Buffer?

下图所示为咱们社区低功耗四核A7 Top Hierarchical Flow后端训练营中的一个案例,设计中存在若干个Power Domain,其中Power Domain2(简称PD2)为default Top Domain,Power Domain1(简称PD1)为一个需要power off的domain&…

21 如何进行高保真压测和服务扩容?

在后台架构中,压测非常常见,也是必须的工作。它能够帮我们发现微服务架构中的性能瓶颈,以及知道构建的微服务能承载的流量极限值。 但实际情况是,很多压测并不能发现瓶颈点和微服务所能承载的真实流量极限值。一方面是因为压测时…

【专篇】DDR4 SDRAM-01总体介绍

概念 DDR4 SDRAM(Double-Data-Rate Fourth Generation Synchronous Dynamic Random Access Memory)是一种先进的高性能存储器规格,是DDR3 SDRAM的后续产品。自2011年首次由三星电子制造并公布以来,它已经成为现代计算机系统中广泛采用的内存标准。 主要特点: 更高带宽: DD…

Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析

1. Spring6 当中的 Bean 循环依赖的详细处理方案源码解析 文章目录 1. Spring6 当中的 Bean 循环依赖的详细处理方案源码解析每博一文案1.1 Bean的循环依赖1.2 singletion 下的 set 注入下的 Bean 的循环依赖1.3 prototype下的 set 注入下的 Bean 的循环依赖1.4 singleton下的构…

什么是人才测评系统?

人才测评系统是一个整体的框架,里面有很多个部分构成,既有常见的人才测评方法,也包含有招聘的目的。随着科学研究的不断深入,人才测评系统已经变得更加完善,将现代心理学和管理学知识吸纳到人才测评理论中来&#xff0…

OpenAI神秘搞事,GPT-4.5默默上线?推理碾压GPT-4网友震惊,奥特曼笑而不语

【新智元导读】就在昨夜,整个AI社区都被一个神秘大模型震撼到了:它名为gpt2-chatbot,性能直接超越很多开源模型和GPT-4!网友们展开猜测,有说它是GPT-4.5的,有说是GPT-5的,还有人猜它是GPT-4Q*&a…

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现 MobileNetV4 - Universal Models for the Mobile Ecosystem PDF: https://arxiv.org/pdf/2404.10518.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: ht…

ARP学习及断网攻击

1.什么是ARP ARP(Address Resolution Protocol)是一种用于在IPv4网络中将IP地址映射到MAC地址的协议。在计算机网络中,每个网络接口都有一个唯一的MAC地址(Media Access Control address),用于识别网络设备…

JAVA同城服务美容美发到店服务上门服务系统源码微信小程序+微信公众号+H5+APP

随着科技的飞速发展,互联网和移动互联网已经渗透到我们生活的方方面面,同城服务美容美发到店服务上门服务系统应运而生,为整个行业带来了巨大的变革和无限的可能。该系统的重要性和优势不言而喻,对于行业发展和用户需求的影响深远…

LLaMA3(Meta)微调SFT实战Meta-Llama-3-8B-Instruct

LlaMA3-SFT LlaMA3-SFT, Meta-Llama-3-8B/Meta-Llama-3-8B-Instruct微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/LLaMA3-SFT默认数据类型为bfloat6 备注 1. 非常重要: weights要用bfloat16/fp32/tf32(第二版大模型基本共识), 不要用fp16, f…

Win环境下Python语言通过ODBC/JDBC连接SinoDB数据库

1. 前言 本文介绍在Windows环境下Python语言通过ODBC和JDBC的方式连接SinoDB数据库,并对数据库进行基本操作。 2. 软件安装包 SinoDB数据库:SinoDB 12.10.FC8   SinoDB CSDK(Windows):SinoDB Client-SDK 4.10.FC8   Python语言开发包&am…

Spring-aop切面环绕通知

1.pom引入 <!-- 切面依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 2.定义注解&#xff1a;AroundAnnotation import java.lang.annotation…

公文写作笔记

标题 最后一行的日期&#xff0c;后边占4个格子。两个数字占一格。落款单位在日期的正上方。 格式积累 内容&#xff1a; ①开头&#xff1a;缘由 ②主题&#xff1a;对策&#xff08;别人做得好&#xff0c;就借鉴&#xff09; ③结尾&#xff1a;简单的总结&#xff08;字…

Linux基础——Linux开发工具(上)_vim

前言&#xff1a;在了解完Linux基本指令和Linux权限后&#xff0c;我们有了足够了能力来学习后面的内容&#xff0c;但是在真正进入Linux之前&#xff0c;我们还得要学会使用Linux中的几个开发工具。而我们主要介绍的是以下几个&#xff1a; yum, vim, gcc / g, gdb, make / ma…