1 case函数的类型


case具有两种格式,简单case函数和case搜索函数。这两种方式,大部分情况下可以实现相同的功能。

1.1 简单case函数语法


case column
when <condition> then value
when <condition> then value
......
else value end;

示例

case sex
when '1' then '男'
when '2' then '女'
else '其他' end;


1.2 case搜索函数语法


case
when <condition> [,<condition>] then value
when <condition> [,<condition>] then value
......
else value end;

示例

case

      when sex = '1' then '男'

     when sex = '2' then '女'

else '其他' end;


简单case 函数重在简洁,但是它只适用于这种单字段的单值比较,而case 搜索函数的优点在于适用于所有比较(包括多值比较)的情况。

例如:

CASEWHEN sex = '1' AND age>18 THEN '成年男性'WHEN sex = '2' AND age>18 THEN '成年女性'ELSE '其他' END;

注意:

CASE函数只返回第一个符合条件的值,剩下的CASE部分将会被自动忽略。比如说,下面这段SQL,你case when type in ('a','b') then '第一类' when type in ('a') then '第二类' else '其他类' end永远无法得到“第二类”这个结果。

2 case行转列

case用的比较广泛的功能就是行转列,就是将记录行里的数据按条件转换成具体的列。看如下的一个示例数据:

create table score(name varchar(10),course varchar(10),scott int);
insert into score values (n'张三',n'语文',74); 
insert into score values (n'张三',n'数学',83);
insert into score values (n'张三',n'物理',93);
insert into score values (n'李四',n'语文',74); 
insert into score values (n'李四',n'数学',84);
insert into score values (n'李四',n'物理',94);

现在我们想实现这样的功能,就是将各学科作为单独的列来显示各个学生各科的成绩。我们可以对课程里的记录做如下的行列转换:

select name, max(case course when '语文' then scott else 0 end) 语文, max(case course when '数学' then scott else 0 end) 数学,max(case course when '物理' then scott else 0 end) 物理 
from score 
group by name;

结果:

3 piovt函数行转列

如果要实现等同上面的结果:

select * from 
score pivot( max(scott) for course in ('语文','数学','物理')) a;

结果:

其中:

for后面的是我们即将进行行转列的列部分
in里面的是我们行转列之后的列
max是聚合IN里面的内容,也可以是其他聚合函数:SUM,MIN,COUNT等
piovt写法比较固定,是case when的一种简略写法。

4 批注

case是我们在日常工作中使用非常频繁的一个功能,可以很好的将我们需要的数据单独的显示在一列里面,有助于对数据有个比较清晰的掌握

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git用法记录

代码中冲突标记的含义&#xff1a;<<<<<<< HEAD 标记当前分支&#xff08;或本地&#xff09;的旧代码作为分隔线 >>>>>>> [commit哈希] 标记从其他分支合并过来的新代码&#xff08;这里的 c472b4b... 是提交哈希&#xff09; 暂存…

解决Android Studio中创建的模拟器第二次无法启动的问题

Android Studio中创建的模拟器&#xff0c;首次启动时一切正常。但是关闭模拟器&#xff0c;下一次启动时一直显示&#xff1a;Connecting to the Emulator&#xff0c;无法启动。无法启动的原因通常是默认开启了模拟器的快速启动功能&#xff0c;首次启动时是“冷启动”&#…

Linux设备驱动架构相关文章

学习一个领域&#xff0c;最好是从多个角度去学习&#xff0c;总有一个角度适合你。学习Linux驱动&#xff0c;从架构的角度把握&#xff0c;比直接看代码更容易接受。以架构为主&#xff0c;结合细节学习&#xff0c;我称之为自上而下的学习方法&#xff0c;就一个字&#xff…

YOLOv13 汉化优化部署版本:超图增强自适应视觉感知的目标检测系统

目录 &#x1f4d6; 项目概述&#x1f680; YOLOv13 核心特性&#x1f4ca; 性能对比&#x1f5bc;️ 可视化效果&#x1f527; 项目优化改进⚙️ 快速部署指南▶️ 运行使用&#x1f4dd; 使用示例&#x1f527; 故障排除&#x1f31f; 项目特色&#x1f517; 相关链接&#…

uni-app webview的message监听不生效(uni.postmessage is not a function)

uni-app开发app web-view组件message事件不触发背景子页面是h5&#xff08;非uni-app版&#xff09;子页面是h5&#xff08;uni-app版&#xff09;背景 大致背景是 在uni-app开发的客户端app中使用web-view嵌入h5页面&#xff0c;在h5中通过postmessage API触发父组件web-view…

【异常案例分析】使用空指针调用函数(非虚函数)时,没有崩溃在函数调用处,而是崩在被调用函数内部

目录 1、问题说明 2、代码段地址与数据段地址 3、使用空指针调用BindWindow函数&#xff08;非虚函数&#xff09;&#xff0c;没有崩在BindWindow函数的调用处&#xff0c;而是崩在函数内部 3.1、虚函数调用的二次寻址 3.2、崩溃在被调用函数内部 4、总结 C软件异常排查…

锁定中科院1区TOP!融合LSTM与Attention做时间序列预测 !

Transformer虽火&#xff0c;但在数据少、要求稳的时序预测场景中&#xff0c;LSTM仍是首选。尤其加上注意力机制后&#xff0c;更是弥补了LSTM的短板&#xff0c;增强了性能&#xff0c;实现了更精确的预测。这种组合不仅应用场景广泛&#xff0c;工业界爱&#xff0c;学术界也…

在不可更改系统上构建数据响应机制的可选策略

在现代企业信息系统架构中&#xff0c;我们常常面临如下挑战&#xff1a;某个业务系统属于“不可变更系统”&#xff0c;我们既不能修改其业务逻辑&#xff0c;也不能对其核心代码做任何侵入式改动。但与此同时&#xff0c;我们又需要对该系统中的某些关键业务数据变更做出响应…

Docker 实战 -- cloudbeaver

文章目录前言文件目录docker-compose.yml网络连接前言 当你迷茫的时候&#xff0c;请点击 Docker 实战目录 快速查看前面的技术文章&#xff0c;相信你总能找到前行的方向 上一篇文章 Docker 实战 – Mysql 讲述了用 docker 搭建 mysql 数据库的过程, 连接数据库的工具很多, …

Rust × WebAssembly 项目脚手架详解

一、模板概览 模板生成方式核心用途典型角色wasm-pack-templatecargo generate …把 Rust 代码 打包成 npm 库「底层算法/组件」作者create-wasm-appnpm init wasm-app构建纯 JS/TS 项目&#xff0c;消费上面生成的 npm 包Web 前端/Node 服务rust-webpack-templatenpm init ru…

RSA 解密逻辑

以下是使用类的方式封装 RSA 解密逻辑&#xff0c;使其更易于调用和管理&#xff1a; from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 class RSADecryptor:"""RSA 解密工具类&#xff0c;封装解密逻辑&#xff0c;方便…

Oracle 19C 在centos中安装操作步骤和说明

1、oracle 一到五&#xff0c;是在centos下&#xff0c;搭建数据的每个具体详细步骤。 oracle:一、环境准备-CSDN博客 oracle:二、centos下安装oracle-CSDN博客 oracle :三、配置LISTEN-CSDN博客 oracle:四、创建数据库-CSDN博客 oracle&#xff1a;五、配置修改-CSDN博客…

《前端无障碍设计的深层逻辑与实践路径》

一个Web应用的价值不仅在于其功能的丰富性,更在于它能否向所有用户敞开大门。那些被忽略的交互细节—一段没有替代文本的图片、一个无法通过键盘触发的按钮、一组对比度不足的文字——正在悄然构建起一道无形的壁垒,将部分用户隔绝在数字世界之外。前端无障碍设计(A11y)的本…

ctfshow-web入门-254-266-反序列化

web254 代码审计&#xff0c;输入给的username和password ?usernamexxxxxx&passwordxxxxxx web255 这题要从cookie中获取值并且需要把isVip设为true&#xff0c;并且将序列化之后的结果进行url编码 <?php class ctfShowUser{public $usernamexxxxxx;public $passw…

ssh服务器端口和本地端口映射

由于服务器防火墙设置&#xff0c;本地能ssh登录远程服务器&#xff0c;但本地不能通过http的方式访问服务&#xff0c;如tensorborad、gradle或其他服务。在不需要修改防火墙安全设置的情况下&#xff0c;这里我们临时通过ssh端口映射的方式&#xff0c;在本地浏览器访问这些服…

计算机网络——UDP

1. UDP的背景 1&#xff09;先有TCP&#xff0c;后觉笨重 在TCP被首次提出后&#xff0c;将“可靠传输&#xff0c;流量控制&#xff0c;拥塞控制”全做在一个协议里随着应用增多 ——> 很多场景&#xff08;语音&#xff0c;视频&#xff09;并不需要万无一失 ——> 更…

常见的深度学习模块/操作中的维度约定(系统性总结)

&#x1f7e9; 1. 数据张量&#xff08;特征图&#xff09;维度这是我们喂进网络或从网络中出来的“实际数据”。类型维度格式举例说明图像/特征图(B, C, H, W)(4, 3, 32, 32)PyTorch中最常用的数据布局&#xff08;NCHW&#xff09;图像/特征图&#xff08;TensorFlow风格&…

【笔记】重学单片机(51)(上)

为学习嵌入式做准备&#xff0c;重新拿起51单片机学习。此贴为学习笔记&#xff0c;仅记录易忘点&#xff0c;实用理论基础&#xff0c;并不是0基础。 资料参考&#xff1a;清翔零基础教你学51单片机 51单片机学习笔记1. C语言中的易忘点1.1 数据类型1.2 位运算符1.3 常用控制语…

Arrays.asList() add方法报错java.lang.UnsupportedOperationException

1. 问题说明 记录一下遇到的这个bug&#xff0c;下面是段个简化后的问题重现代码。 public class Test {public static void main(String[] args) {List<Integer> list Arrays.asList(1, 2, 3);list.add(4);} }2. 原因分析 我们看一下Arrays.asList(…) 的源码&#xff…

克罗均线策略思路

一个基于移动平均线的交易策略&#xff0c;主要通过比较不同周期的移动平均线来生成买卖信号。该策略交易逻辑思路和特点&#xff1a;交易逻辑思路1. 多头交易逻辑&#xff1a;- 当当前周期的收盘价高于其4周期移动平均线&#xff0c;并且4周期移动平均线高于9周期移动平均线&a…