当前位置: 首页 > 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.lryc.cn/news/609329.html

相关文章:

  • SpringBoot AI自动化测试实战案例
  • GitCode疑难问题诊疗
  • Linux命令基础(下)
  • 1.内核模块
  • 14.Redis 哨兵 Sentinel
  • 2. 字符设备驱动
  • IO流-对象流
  • 克罗均线策略思路
  • `npm error code CERT_HAS_EXPIRED‘ 问题
  • Java Stream API 编程实战
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 77-1(题目+回答)
  • 《测试驱动的React开发:从单元验证到集成协同的深度实践》
  • 【2025ICCV-目标检测方向】WaveMamba:用于 RGB-红外目标检测的小波驱动曼巴融合
  • 百度招黑产溯源安全工程师
  • SQL注入SQLi-LABS 靶场less31-38详细通关攻略
  • Maxscript在选择的可编辑多边形每个面上绘制一个内部圆形
  • 【高等数学】第七章 微分方程——第十节 常系数线性微分方程组解法举例
  • [硬件电路-140]:模拟电路 - 信号处理电路 - 锁定放大器概述、工作原理、常见芯片、管脚定义
  • 类与对象(中),咕咕咕
  • Zama的使命
  • 零确认双花攻击
  • 8月3日星期日今日早报简报微语报早读
  • 《从原理到实践:MySQL索引优化与SQL性能调优全解析》
  • 【Redis学习路|第一篇】初步认识Redis
  • C的运算符与表达式
  • BP神经网络:当线性模型已到尽头,如何用“人造大脑”挖掘非线性预测规律?
  • 26李林880高数第二章 一元函数微分学及其应用
  • Kafka 是什么?
  • SpringBoot项目数据脱敏(自定义注解)
  • C语言基础03——数组——习题