case when then else end的用法

2023-11-10

主要分为两种:简单case函数和搜索case函数

简单case函数

case column 
when 'A' then 'a' 
when 'B' then 'b' 
else 0 end;

搜索case函数

case when column='A' then 'a'
when column='B' then 'b'
else 0 end;

简单case函数语法比较简洁,但是较搜索case函数而言,功能上会有所限制.下面重点总结下搜索case函数的常见用法.

所有case…when…用法的本质都是:给已知数据重新赋值形成新的字段
需要注意的:不加else条件,会默认返回null
(hive中必须要加else语句)

常见用法1 : 重新分组
table A的数据如下:

country flower_classes
中国 2000
印度 1000
法国 3000
英国 2000
意大利 2500
新西兰 3000
美国 1500

按照洲的名称统计花的种类,计算sql如下:

select sum(flower_classes)  as flower_classes
,case when country = '中国'  then '亚洲'
 when country = '印度'  then '亚洲'
 when country = '法国'  then '欧洲'
 when country = '英国'  then '欧洲'
 when country = '意大利'  then '欧洲'
 when country = '新西兰'  then '大洋洲' 
 end as continent
from table A
group by 
 case when country = '中国'  then '亚洲'
 when country = '印度'  then '亚洲'
 when country = '法国'  then '欧洲'
 when country = '英国'  then '欧洲'
 when country = '意大利'  then '欧洲'
 when country = '新西兰'  then '大洋洲' 
 end;

常见方法2 : 与聚合函数一起使用
table B的数据如下:

city sex population
武汉 1000
武汉 2000
长沙 500
长沙 600
上海 1000
上海 2000
北京 1500
北京 2000
深圳 3000
深圳 4000
分别统计男女的人口数量,计算sql如下:
select 
from 
sum(case when sex='男' then population else 0 end) as male_population
,sum(case when sex='女' then population else 0 end) as 
female_population 
from table B

常见用法3:与聚合函数一起使用
table C的数据如下:

name club_id club_name main_club_id
林一 1 羽毛球 1
小白 2 篮球 0
小白 3 足球 1
大黄 2 篮球 1
大黄 3 足球 0
大黄 4 游泳 0
小麦 4 游泳 1
数据解释:如果此人只加入了1个社团,其main_club_id设为1;如果此人加入的社团大于1个,主社团的main_club_id设为1,其他为0.
要求统计:对于只加入1个社团的人,其club_id;加入多个社团的人,其主社团的club_id.统计sql如下:
select 
case when count(club_id)=1 then max(club_id)
else max(case when main_club_id=1 then club_id end) 
end as main_club_id 
from table C
group by name

参考链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

case when then else end的用法 的相关文章

  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • Extbase - 从查询中获取创建的sql

    我想从我的typo3 扩展中获取一些数据库表 该扩展基于 extbase 查询总是不返回任何内容 但数据存在 我试过这个 query this gt createQuery query gt statement SELECT FROM my
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • TSQL - 生成文字浮点值

    我理解比较浮点数时遇到的许多问题 并对它们在这种情况下的使用感到遗憾 但我不是表格作者 只有一个小障碍需要克服 有人决定使用浮点数 就像您期望使用 GUID 一样 我需要检索具有特定浮点值的所有记录 sp help MyTable Colu
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1
  • SQL Server 2008 错误 233

    我正在使用以下 sql 脚本在 SQL Server 2008 中创建新登录名 CREATE LOGIN xyz WITH PASSWORD xyz DEFAULT DATABASE master DEFAULT LANGUAGE us e
  • 需要 SQL 查询澄清[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个由以下列组成的表 billid patientid doctorid fees 如何显示治疗多名患者的医生 尝试了以下代码并得到了
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • 可以有一个带有可变列的表吗?

    这可能是一个愚蠢的问题 但这里是 是否可以创建一个能够包含具有可变列数和自定义列名称的行的动态表 我浏览过 EAV 建模 但看起来很沉重 现实生活中的例子可能是这样的 假设我有一个客户登记册 但每个客户可能需要输入不同的信息 根据您要输入的
  • SQL Server 查询中 UNION ALL 与 OR 条件

    我必须根据表上不存在的条件选择一些行 如果我使用如下的 union all 它会在不到 1 秒的时间内执行 SELECT 1 FROM dummyTable WHERE NOT EXISTS SELECT 1 FROM TABLE t WH
  • Ruby ActiveRecord 和 sql 元组支持

    ActiveRecord 是否支持 where 子句中的元组 假设底层数据库支持 结果 where 子句看起来像这样 where name address in John 123 Main St I tried Person where n
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con

随机推荐

  • jdk安装与环境变量配置,看这篇就够了

    文章目录 场景 jdk 下载安装 如何环境变量的配置 总结 场景 在做 java 开发或者 android 开发 经常会碰到 jdk 安装与环境变量的配置 每次配置的时候 经常需要去查看一下 而且偶尔还会出现错误 这里就把这块详细的记录一下
  • (centos7-x86)编译安装zabbix6.0LTS+Mariadb10.5+Apache+php7.4【安装完整版】

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 zabbix能监视各种网络参数 保证服务器系统的安全运营 并提供灵活的通知机制以让系统管理员快速定位 解决存在的各种问题 zabbix由2部分构成
  • 2023年软件测试职业发展趋势【附晋升路线】

    2023年就这么来啦 未来可期 你准备好了么 软件测试是个可以很快入门的职业 门坎不高 一般软件测试人员的起薪普遍比较高 而工作1 2年后 月薪达到10k 15k的比比皆是 另外还可享受带薪年假 内部培训 年终奖金等福利待遇 可以说跟开发人
  • 解决pycharm报错ModuleNotFoundError: No module named ‘selenium‘

    按照这篇博客安装了seleniu和Chromedriver后 在运行脚本时 报了如题的错误 意思是没有导入selenium模块 于是我有在cmd环境下输入检查命令 pip show selenium 重新检查了下 的确有安装 再检查下在py
  • 以太坊开发者工具的最新清单

    以太坊开发者工具的最新终极清单 用于在以太坊上开发应用程序的可用工具 组件 框架和平台的指南 对于任何开发者 无论你是一个睁大眼睛的Web3新手还是一个头发灰白的OG加密无政府主义技术霸主 Github都是你的朋友 特别是ConsenSys
  • 我将 ChatGPT 变成了每月的经常性收入

    这是您可以做同样的事情的方法 ChatGPT 很棒 毫无疑问 但更好的被动收入 将这 2 个坏男孩组合在一起 你就有了一个杀手组合 这正是我所做的 今天 我将解释如何 具体来说 我会告诉你 我做了什么把 ChatGPT 变成 MRR 我是怎
  • c++获取当前时间戳,单位是毫秒

    你可以使用 time h 中的 time 函数来获取当前的时间戳 它的返回值是从 1970 年 1 月 1 日 00 00 00 UTC 到现在的时间 以秒为单位 如果你需要以毫秒为单位的时间戳 你可以使用 time 函数的返回值除以 10
  • CentOS 8 官方正式发布了!

    CentOS 8 官方正式发布了 CentOS 完全遵守 Red Hat 的再发行政策 并且致力与上游产品在功能上完全兼容 CentOS 对组件的修改主要是去除 Red Hat 的商标及美工图 该版本还包含全新的 RHEL upstream
  • 数字序列的最大间隔(harsh)

    题目描述 题目描述 请输出数字序列的最大间隔 请使用以下伪随机数生成函数 rand32 生成伪随机数 int seed int rand return seed seed 214013L 2531011L gt gt 16 0x7fff i
  • 《积累》键盘keycode对照表

    字母和数字键的键码值 keyCode 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 3 51 D 68 M 77 V 86 4
  • Mybatis学习笔记6 模糊查询like

    1 模糊 like 模糊查询的实现有两种方式 一是java代码中给查询数据加上 二是在mapper文件sql语句的条件位置加上 需求 查询姓名有 王 的 1 1 java代码中提供要查询的 王 接口方法 List
  • Linux云计算薪资及发展前景,云计算Linux就业方向及前景分析 2019云计算行业发展现状及前景趋势分析...

    云计算 cloud computing 是一种基于因特网的超级计算模式 在远程的数据中心里 成千上万台电脑和服务器连接成一片电脑云 那么 今天我们就来说说云计算就业形势方向及前景和云计算行业发展现状及前景分析 云计算是未来的趋势 有了云平台
  • 迪杰斯特拉(Dijkstra)算法 Java实现(最短路径)

    基本思想 通过Dijkstra计算图G中的最短路径时 需要指定起点vs 即从顶点vs开始计算 此外 引进两个集合S和U S的作用是记录已求出最短路径的顶点 而U则是记录还未求出最短路径的顶点 以及该顶点到起点vs的距离 初始时 S中只有起点
  • [Wikioi 2808][NOIP 1998普及组]二的幂次方---HBNU的童鞋过来看看

    题目描述 Description 任何一个正整数都可以用2的幂次方表示 例如 137 2 7 2 3 2 0 同时约定次方用括号来表示 即a b可表示为a b 由此可知 137可表示为 2 7 2 3 2 0 进一步 7 2 2 2 2 0
  • python+selenium+Chrome options参数的使用

    Chrome Options常用的行为一般有以下几种 禁止图片和视频的加载 提升网页加载速度 添加代理 用于翻墙访问某些页面 或者应对IP访问频率限制的反爬技术 使用移动头 访问移动端的站点 一般这种站点的反爬技术比较薄弱 添加扩展 像正常
  • java-----基本类型包装类

    public class IntegerDemo public static void main String args Integer i1 new Integer 100 根据 int 创建Integer对象 过时 System out
  • Eclipse配置tomcat服务器

    1 首先下载tomcat 下载地址 http maven apache org 下载好后解压至本地磁盘根目录 我是解压至D盘根目录 2 打开Eclipse 进入Window gt Preferences 3 找到Server gt Runt
  • 教妹学Java(五):Java程序在编译和运行时发生了什么

    大家好 我是沉默王二 本篇文章通过我和三妹的对话来谈一谈 Java程序在编译和运行时发生了什么 没见过这么有趣的标题吧 语不惊人死不休 没错 本篇文章的标题就是这么酷炫 接受不了的同学就别点进来看了 所谓好奇心害死猫 能够接受的同学我只能说
  • exchange服务器保留邮件,Exchange服务器之Exchange备份单个用户邮件及清理邮箱数据...

    大家好 为了能够和有疑问的同行者及时沟通 我建立了一个群 615870353 我会免费更新行业信息 并回复大家提出的各种行业问题 问题 需要在Exchange服务器上导出一个用户的邮箱数据 然后再把这个人的邮箱数据清理了 但是不影响账户 方
  • case when then else end的用法

    主要分为两种 简单case函数和搜索case函数 简单case函数 case column when A then a when B then b else 0 end 搜索case函数 case when column A then a