SQL助你面大厂(行列转换)

news2024/11/15 11:08:06

在面试中,不仅有算法题,还有这个老大难的SQL编写

      SQL在面试中也是会经常会被问到,不仅仅是为了面试,在做项目的时候,往往用的最多的就是CRUD,这也提高不了我们的编写SQL的能力,所以最近我准备总结几个面试模板,以及一些解决问题的技巧分享给大家,相信大家的SQL能力肯定会突飞猛进!!!

在这里先复习一下SQL中的执行顺序,了解执行顺序才是解决问题的最关键的问题

编写和执行顺序: 

 首先我们现在数据库中进行创表,将我们等会要的数据先加入到数据库中

--创建我们需要的数据
CREATE TABLE test(
--年份
YEAR VARCHAR(20),
--月份
MONTH VARCHAR(20),
--营业额
amount VARCHAR(20)
)

--往数据库里填写我们需要的信息
INSERT INTO test(YEAR,MONTH,amount)VALUE('2002','1','1.1'),('2002','2','2.3'),('2002','3','3.1'),('2003','1','0.5'),('2003','2','1.6'),('2003','3','4.6')

 这是不是与我们平时看的月份销量额有所不同,我们平时所看的是一般是这样的

 我们行转列、列转行的过程中,我们的代码模板是:

group by+sum(if())【或者count(if())】

 我们先用case...when...来解决这个问题:

SELECT YEAR,
    SUM(CASE WHEN MONTH=1 THEN amount ELSE 0 END) AS M1,
     SUM(CASE WHEN MONTH=2 THEN amount ELSE 0 END) AS M2,
     SUM(CASE WHEN MONTH=3 THEN amount ELSE 0 END) AS M3
    FROM test
    GROUP BY YEAR

 结果和我们想的一致,这就达到了我们的预期,我们也就可以用三目运算符去代替case when

SELECT YEAR,
    SUM(IF(MONTH=1,amount,0)) AS M1,
    SUM(IF(MONTH=2,amount,0)) AS M2,
    SUM(IF(MONTH=3,amount,0)) AS M3
    FROM test
    GROUP BY YEAR

但是这里又有人问?博主博主,这个if和case when待敌有什么区别?

       其实当结果只有两个的时候,if和case when其实是没什么区别的,if语句反而可读性较高,但是当结果有多个时,这个时候if语句就失去它的作用,反而case的功能更加强大一点,case when可以选择很多的种情况

case 
   when *** 
     then ***
   when ***
     then ***
   else
      ***
end


       但是又有人会问,为什么这样写可以将列转行,其实这里我们无意识间已经做了简化操作,其实上述的代码是我们简化后的代码,那让我们一步一步来讲SQL为什么会这么写?

先让我们看这个代码:

SELECT *,
    IF(MONTH=1,amount,0) AS M1
    FROM test

       在新加字段的M1中,除了2002年的1月份有值之外,其他月份都是0,所以这个时候我们将表按照year进行分组,得到的是不是

我们再将M1中求和是不是就是我们2002年的1月销售额

SELECT YEAR,
    SUM(IF(MONTH=1,amount,0)) AS M1
    FROM test
    GROUP BY YEAR

 这时又有人问了,这个为什么进行分组后,前面查询的*要换成year?这是必须要进行换么?

      这种情况其实也是很常见的,因为你对这些还是不太怎么了解,在进行分组(group by)后,前面的select 查询语句后面只需要查找group by后面跟的字段以及聚合函数,如果查找了其他字段会报错

SELECT *,
    SUM(IF(MONTH=1,amount,0)) AS M1
    FROM test
    GROUP BY YEAR

M1解决了,我们再来看M2

SELECT YEAR,
    SUM(IF(MONTH=1,amount,0)) AS M1,
    SUM(IF(MONTH=2,amount,0)) AS M2
    FROM test
    GROUP BY YEAR

 所以原理就是如此,根据分组创建临时表,然后通过SUM函数进行操作

这道题相信大家已经看懂了!!!冲冲冲

下面有一道题可供大家练习:

统计每天的胜负场次,以下图方式呈现:

    CREATE TABLE win(
     DATE VARCHAR(20),
     result VARCHAR(20)    
    )
    
    INSERT INTO win(DATE,result)VALUE('2023-8-19','胜'),('2023-8-19','胜'),('2023-8-19','负'),('2023-8-20','负'),('2023-8-20','负')
  • sum+if:

    SELECT DATE,
      SUM(IF(result='胜',1,0)) AS"胜",
       SUM(IF(result='负',1,0)) AS"负"
        FROM win
        GROUP BY DATE

  • count+if:
   SELECT DATE,
      COUNT(IF(result='胜',1,NULL)) AS"胜",
       COUNT(IF(result='负',1,NULL)) AS"负"
        FROM win
        GROUP BY DATE

 这时候肯定还有人问?

为什么count在写判断的时候,要将0换成null,我们先将0换回来看看会发生什么事情?

 SELECT DATE,
      COUNT(IF(result='胜',1,0)) AS"胜",
       COUNT(IF(result='负',1,0)) AS"负"
        FROM win
        GROUP BY DATE

 我们将分组暂时去掉,看看我们会查到什么数据

SELECT *,
      IF(result='胜',1,0) AS"胜",
      IF(result='负',1,0) AS '负'
        FROM win

       这里就要说一下count聚合函数了,它是统计数据条数的,只有为null值,count才会无视这条数据,所以在统计条数的时候,避免字段中出现null值,但是统计这些结果值的时候,我们往往把不存在的数据置为null,避免统计时出现问题,因为0也是代表一条正确的数据,所以count在统计的时候也会将数值为0的数据计入到结果集中,这就出现了错误

今天的面试专题行列互换已经结束了,希望此文对你们有所帮助!!!

这么辛苦,给个关注再走呗!!!

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

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

相关文章

webshell实践,在nginx上实现负载均衡

1、配置多台虚拟机,用作服务器 在不同的虚拟机上安装httpd服务 我采用了三台虚拟机进行服务器设置:192.168.240.11、192.168.240.12、192.168.240.13 [rootnode0-8 /]# yum install httpd -y #使用yum安装httpd服务#开启httpd服务 [rootnode0-8 /]# …

开发一个文生图的功能

文章目录 效果开发环境原理核心代码代码仓库问题效果 开发环境 Python 3.10PyCharm原理 借助开源项目stable-diffusion,通过该项目封装python库diffusers,可以轻易的实现文生图的功能。 关于更多diffusers的功能请访问:https://huggingface.co/docs/diffusers/index 核心代…

Linux命令200例:nc非常有用的网络工具(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

LeetCode128.最长连续序列

我这个方法有点投机取巧了,题目说时间复杂度最多O(n),而我调用了Arrays.sort()方法,他的时间复杂度是n*log(n),但是AC了,这样的话这道题还是非常简单的,创建一个Hashmap,以nums数组的元素作为ke…

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GWO-SVM灰狼优化算法优化支持向量机多输入单输出回归预测(多指标,多图)效果一览基…

Java源码分析(一)Integer

当你掌握Java语言到了一定的阶段,或者说已经对Java的常用类和API都使用的行云流水。你会不会有一些思考?比如,这个类是如何设计的?这个方法是怎么实现的?接下来的一系列文章,我们一起学习下Java的一些常见类…

CF 1354 C1 C2 Polygon Embedding(求奇偶正多边形的外接最小正方形的边长)

CF 1354 C1 / C2 Polygon Embedding(求奇偶正多边形的外接最小正方形的边长) Problem - C1 - Codeforces Problem - C2 - Codeforces EASY : 大意:给出一个偶数 n , 求 正 (2 * n) 边形的最小外接正方形的边长。 可以想出两种最直观的情况…

【VBA_选择区域的关键词更改颜色】

Private Sub CommandButtonl_Click() Cells.Font.ColorIndex 1 End Sub Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range, i As Integer Dim T As String Dim C As Integer For Each rng In Selection T "河北" C 3 i 1 Do While InStr(…

【宝藏系列】一文讲透C语言数组与指针的关系

【宝藏系列】嵌入式 C 语言代码优化技巧【超详细版】 文章目录 【宝藏系列】嵌入式 C 语言代码优化技巧【超详细版】👨‍🏫前言1️⃣指针1️⃣1️⃣指针的操作1️⃣2️⃣关于指针定义的争议1️⃣3️⃣对教材错误写法的小看法 2️⃣指针和数组的区别2️⃣…

最全攻略之人工智能顶会论文发表

最全攻略之人工智能顶会论文发表 1. 人工智能顶会1.1 CCF 顶会列表2023年人工智能顶会时间线 2.人工智能顶会论文发表流程2.1 顶会论文发表流程2.2 顶会论文审稿流程 3.1顶会论文发表指南3.1 顶会论文七要素3.2 顶会论文写作要点 4.人工智能发展趋势4.1 人工智能未来趋势4.2 人…

基于Matlab 代码实现UWB信号的产生和调制、接收和检测系统

文末提供完整的matlab代码实现下载链接 介绍 本文将分为两部分介绍。在第一部分中,使用 TR 的建模UWB 信号发生器,生成编码二进制数据的脉冲调制信号。这第二部分涉及对接收第一部分中生成的信号的接收器进行建模提取并显示信息。每个信号的时间图和频率响应绘制了阶段。使用MA…

STM32使用IIC通信的引脚配置问题

STM32使用IIC通信的引脚配置问题 在使用IIC通信时,遇到引脚配置问题,记录一下: IIC的两个引脚SDA和SCL都要求既能输入又能输出。 问题: SDA线是由不同的器件分时控制的,这样就会有一个问题:当一个器件主动…

【Redis】Redisson分布式锁原理与使用

【Redis】Redisson分布式锁原理与使用 什么是Redisson? Redisson - 是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象,Redisson、Jedis、Lettuce 是三个不同的操作 Redis 的客户端,Jedis、Le…

flutter 的TextField在有值的情况下再次获取焦点有个水滴的问题

1、问题截图 2、 出现原因:由于触发了 Android 的文本框的粘贴、选择复制等操作。由于 Android 高开源,一般的文字长按即可出现拖动选择复制的选项,此处即是触发了这个。 3、解决办法:给TextField设置一个属性,禁止粘…

MISRA 2012学习笔记(3)-Rules 8.4-8.7

文章目录 Rules8.4 字符集和词汇约定(Character sets and lexical conventions)Rule 4.1 八进制和十六进制转译序列应有明确的终止识别标识Rule 4.2 禁止使用三字母词(trigraphs) 8.5 标识符(Identifiers)Rule 5.1 外部标识符不得重名Rule 5.2 同范围和命名空间内的标识符不得重…

kafka--kafka的基本概念-副本概念replica

三、kafka的基本概念-副本概念replica Broker 表示实际的物理机器节点 Broker1中的绿色P1表示主分片Broker2中的蓝色P1表示副本分片,其余类似,就是主从的概念,如果一个Broker挂掉了,还有其它的节点来保证数据的完整性 P可以看做分…

[oneAPI] 使用字符级 RNN 生成名称

[oneAPI] 使用字符级 RNN 生成名称 oneAPI特殊写法使用字符级 RNN 生成名称Intel Optimization for PyTorch数据下载加载数据并对数据进行处理创建网络训练过程准备训练训练网络 结果 参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517…

修改word正文样式后其他标题样式也跟着改变

目录 前言问题原因解决办法 前言 今天在用word的时候,更改了正文样式,然后其他标题的样式也随之更改,于是上网查了一下,并记录一下 问题 当修改正文样式为缩进2字符时,其他标题的样式也是缩进2字符。 原因 出现此…

VScode安装教程和中文设置

软件:Visual Studio Code 版本:2023 语言:简体中文 大小:88.48M 安装环境:Win11/Win10 硬件要求:CPU2.0GHz 内存4G(或更高) 下载链接: https://pan.baidu.com/s/1jpMsGkoXZ0MHFcCWH_…

Linux学习之Telnet明文漏洞

yum install telnet telnet-server xinetd -y安装软件。 systemctl start xinetd.service开启xinetd,systemctl start telnet.socket开启telnet。 xinetd来监控端口,然后把数据传给telnet。 ifconfig eth0看一下eth0网卡信息,。 iptable…