当前位置: 首页 > news >正文

GaussDB case when的用法

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.dtcms.com/a/312334.html

相关文章:

  • Linux常用命令分类总结
  • 论文阅读笔记:《Dataset Condensation with Distribution Matching》
  • 【C 学习】04.1-数字化基础
  • Web 开发 11
  • Java 大视界 -- Java 大数据在智能教育学习资源个性化推荐与学习路径动态调整中的深度应用(378)
  • Web 安全之开放重定向攻击(Open Redirect )详解
  • Spring+K8s+AI实战:3全栈开发指南
  • Node.js 操作 MySQL
  • [每周一更]-(第154期):Docker 底层深度剖析:掌控 CPU 与内存资源的艺术
  • Mysql深入学习:慢sql执行
  • 【嵌入式硬件实例】-555定时器IC的负电压发生器
  • 如新能源汽车渗透率模拟展开完整报告
  • GB 44496-2024《汽车软件升级通用技术要求》对行业从业者的变革性影响
  • MySQL存储过程和触发器
  • 关于车位引导及汽车乘梯解决方案的专业性、系统性、可落地性强的综合设计方案与技术实现说明,旨在为现代智慧停车楼提供高效、安全、智能的停车体验。
  • 6.1、Redis多级缓存原理和优化、Redis部分参数优化调整
  • 在 macOS 上通过 Docker 部署DM8 (ARM 架构)
  • 译|用户增长策略如何使用因果机器学习的案例
  • Javaweb————Apache Tomcat目录文件结构讲解
  • java学习 73矩阵置零 54螺旋矩阵 148排序链表
  • pydantic - 更方便地编写 entity 类
  • [LeetCode优选算法专题一双指针——有效三角形的个数]
  • Vue+SpringBoot+langchain4j实战案例:实现AI消息问答 及 Markdown打字机渲染效果
  • CVE-2025-5947 漏洞场景剖析
  • ⭐CVPR2025 FreeUV:无真值 3D 人脸纹理重建框架
  • winntsetup安装驱动和光驱安装F6功能一样----NT5.2.3790源代码分析
  • 嵌入式硬件篇---Openmv
  • 若没有安全可靠性保障,对于工程应用而言,AI或许就是大玩具吗?
  • 13.Redis 的级联复制
  • 计算机网络:如何在实际网络中进行子网划分