【MySQL】易忘易错函数和经典例题

news2025/1/16 15:58:48

目录

  • 一、函数
    • 1. UNION ALL 以及 UNION
      • UNION ALL
      • UNION
    • 2. group_concat
  • 二、例题:
    • 1. 列转行
    • 2. 行转列
    • 3. 查找第N高的数据,没有则返回null

一、函数

1. UNION ALL 以及 UNION

union:对多个结果,去重+排序
union all:对多个结果,不去重,不排序

UNION ALL

  • 584. 寻找用户推荐人
  • 1965. 丢失信息的雇员

UNION

  • 1965. 丢失信息的雇员

2. group_concat

  • 1484. 按日期分组销售产品

二、例题:

1. 列转行

  • LeetCode_1795. 每个产品在不同商店的价格

2. 行转列

  • LeetCode_1873. 计算特殊奖金
  • LeetCode_627. 变更性别
  • LeetCode_608. 树节点

关于 case when,可以看看这篇:【MySQL】SQL之CASE WHEN用法详解

3. 查找第N高的数据,没有则返回null

  • LeetCode_176. 第二高的薪水

引申一下,如果获取第N高的数据呢?没有则返回null

Create table If Not Exists Employee (id int, salary int)
Truncate table Employee
insert into Employee (id, salary) values ('1', '100')
insert into Employee (id, salary) values ('2', '200')
insert into Employee (id, salary) values ('3', '300')

LIMIT + OFFSET (取第N高的数) + 子查询 (没有则返回null)

# 2. 挑出 Salary 列,显示的名字为 SecondHighestSalary
# 这里为什么要去重?是因为可能最高分有多个
SELECT DISTINCT
    Salary AS SecondHighestSalary
# 1. 找到 Employee 表
FROM
    Employee
# 3. 把表中的数据按照薪水排序,最高的在最上面
# !!!!! 第 N 低的数据呢?asc 排序,offset N  !!!!!!!!
ORDER BY Salary DESC
# 4. limit 1 :取最高薪水
LIMIT 1 
# 5. 偏移 N 位,就获取到了第 N 高的数据了
OFFSET 1

此时,如果没有这样的第二最高工资,这个解决方案将被判断为 “错误答案”,因为本表可能只有一项记录。为了克服这个问题,我们可以将其作为临时表。

SELECT
    (SELECT DISTINCT
            Salary
        FROM
            Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1) AS SecondHighestSalary;

LIMIT + OFFSET (取第N高的数) + IFNULL (没有则返回null)

IFNULL(expr1,expr2)的用法:

假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。

IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

SELECT
    IFNULL(
        (SELECT DISTINCT Salary
            FROM Employee
            ORDER BY Salary DESC
            LIMIT 1 OFFSET 1),
        NULL) AS SecondHighestSalary;

在前面的基础上,猜一猜 limit 3 offset 1 表示的是什么数据?

在这里插入图片描述

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

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

相关文章

AB测试——原理介绍(中心极限定理、大数定理、假设检验、两类错误)

作为AB测试的学习记录,本文主要整理总结了AB测试背后的数学原理和一些概念解释。 1、控制变量法 基于控制变量法的思想,通过对比两组样本(实验组和对照组)的表现是否有差异,从而验证“变量”的作用。 借用中学生物课…

Linux常用命令——xauth命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) xauth 显示和编辑被用于连接X服务器的认证信息 补充说明 xauth命令用于显示和编辑被用于连接X服务器的认证信息。 语法 xauth(选项)(参数)选项 -f:不使用默认的认证文件,而使用指定的…

动手深度学习-线性神经网络:softmax回归

目录1.分类问题2. 网络架构3.softmax运算4. 损失函数交叉熵损失函数参考教程:https://courses.d2l.ai/zh-v2/ 1.分类问题 从回归到多类分类:对类别进行一位有效编码——独热编码(one-hot encoding)。 独热编码是一个向量&#x…

HTTP与HTTPS的区别,HTTPS提高性能,HTTP2的新特性

目录数据传输区别安全性区别端口区别交互区别HTTPS的工作流程HTTPS的实现原理机密性完整性身份认证和不可否认HTTPS 使用流程HTTPS性能优化点HTTP2的特性向下兼容HTTP/1头部压缩二进制虚拟流、多路复用数据传输区别 http也相当于HTTP协议,是超文本传输协议的意思&a…

PyQt6快速入门-多文档界面(MDI)

多文档界面(MDI) 文章目录 多文档界面(MDI)1、子窗口创建2、主窗口创建3、运行结果多文档界面(Multi Document Interface,MDI)是一种应用程序界面管理方法。MDI应用程序一般由一个主窗口和多个子窗口组成,这些子窗口在主窗口里显示,并共享主窗口的菜单栏,工具栏。在MDI应用…

netty(1):NIO 基础之三大组件和ByteBuffer

1 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出&…

C++生成.dll文件后在Python中引用(包括传递参数是double型、char*数组,接收参数也为数组)

一、问题描述 博主想要实现的C函数原型如下: double* getInfo(int flag, double xyz[], char *xodrPath)也就是需要传递参数为三个不同类型的参数,返回值为double类型的指针(数组)。 那么如何在Python中如何通过这个函数生成的…

完全兼容GM8775C方案|替代GM8775C设计|CS5518替代GM8775C DSI转双LVDS设计方案

GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS功能。GM8775C输入端DSI符合 协议支持 MIPI D-PHY 1.00.00 和MIPI DSI 1.02.00,可实现 1 到 4通道 DSI 信号接收。最大数据率 1Gbps/通道。视频输入格式支持 16bit RGB565、18bit RGB6…

Mybatis 一对一、一对多、多对多

今天我们来复习一下 Mybatis 框架吧 总所周知,Mybatis 是一款优秀的 基于ORM 半自动 轻量化 的 持久层框架 ORM:对象关系映射,简单的说就是表结构对应实体类 半自动:可灵活配置SQL,优化代码性能 轻量化&#xff1a…

php源代码保护——PHP加密方案分析解密还原

前言 php是一种解释型脚本语言.与编译型语言不同,php源代码不是直接翻译成机器语言.而是翻译成中间代码(OPCODE) ,再由解释器(ZEND引擎)对中间代码进行解释运行 . 在php源代码的保护在原理可以分为3大类. 源代码混淆(编码)OPCODE混淆(编码)修改解释引擎(虚拟机) 在部署上可…

Vue学习笔记 ④

文章目录template 选项Vue 生命周期生命周期图示生命周期钩子beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed组件基础组件是什么?组件注册全局组件局部组件组件名组件复用自闭合组件组件的 data 选项单个根元素组件\_Prop注册自定…

怎么排除无效问卷?

目录 1、答题限制 1)设置问卷验证码/密码 2)设置填写唯一链接 2、题目设置 1)设置陷阱题目 2)打乱题目顺序 3)设置跳转逻辑 4)题目数量限制 3、问卷筛选 问卷调查是一种能够在进行社会调研时帮助我…

SAP ABAP发送HTML格式的邮件

输入参数: I_SUBJECT:内容的简短描述 IT_MESSAGE_BODY:邮件主体部分(convert string to table) IT_ATTACHMENTS:附件内容 I_SENDER_MAIL:发送者的电子邮件地址 I_ATTMSG_CHECK:…

浙大MBA/MPA/MEM复试中的五大认知误区

在每年的研究生复试过程中都不乏大意失荆州者,经过联考初试的洗礼走到复试环节,却因为录取排名的变化而止步于录取大门口。在这些案例中,不少考生其实是针对复试这个环节有诸多认知误区,本期杭州达立易考结合MBA/MEM/MPA在职类硕士…

CentOS配置静态IP

CentOS配置静态IP1.获取VMnet8虚拟网卡的网段2.编辑虚拟机虚拟网络3.虚拟机中网络配置4.验证配置1.获取VMnet8虚拟网卡的网段 通过ipconfig -all查询VMnet8网卡的网段,这个等会需要使用 这里是:192.168.177 这里注意,还需要记录一下宿主机&…

rust字符串

字符串类型 诸位在入门rust的时候,要认真,因为字符串类型在rust中有好几种,一不小心就搞混了类型,导致代码编译报错。好在有强大的rust-analyzer和vscode帮助我们。我们直接通过一段代码来开始认识rust的字符串类型。 fn main()…

nginx学习笔记5(小d课堂)

全局异常兜底数据返回 我们如果访问的路径不存在,会给我们返回一个404.那么我们就可以通过nginx配置去返回兜底数据: 修改完配置,重启nginx。 这样我们就返回我们的兜底数据了。 nginx封禁恶意ip 我们现在随便选择一个ip进行封禁测试。 我们现…

.Net Core 6.0 WebApi配置跨域

ASP.Net Core 6.0 WebApi配置跨域 Program.cs文件代码如下: //配置跨域 builder.Services.AddCors(cor > {var cors configuration.GetSection("CorsUrls").GetChildren().Select(p > p.Value);cor.AddPolicy("Cors", policy >{poli…

92、【树与二叉树】leetcode ——111. 二叉树的最小深度:层次遍历+先序DFS+后序DFS[子问题分解](C++版本)

题目描述 原题链接:111. 二叉树的最小深度 解题思路 1、迭代法:层序遍历BFS 最小深度的特点是第一次遍历到结点的左右指针为NULL,此时该路径为最短路径。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

探索SpringMVC-组件之HandlerExceptionResolver

前言 在介绍完Handler、HandlerAdapter、HandlerMapping之后,剩下的比较关键的组件就是HandlerExceptionResolver、ViewResolver。其他的像国际化、主题、文件上传、重定向,这些锦上添花的组件都是一个框架需要关心的。但不是我们平常使用的核心功能&am…