Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a') THEN '第二类'
ELSE'其他' END
下面我们来看一下,使用Case函数都能做些什么事情。
一,已知数据按照另外一种方式进行分组,分析。
有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)
国家(country) 人口(population)
中国 600
美国 100
加拿大 100
英国 200
法国 300
日本 250
德国 200
墨西哥 50
印度 250
根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲 人口
亚洲 1100
北美洲 250
其他 700
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。
如果使用Case函数,SQL代码如下:
SELECT SUM(population),
CASE country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END
FROM Table_A
GROUP BY CASE country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END;
同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL代码如下;
SELECT
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class,
COUNT(*)
FROM Table_A
GROUP BY
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END;
二,用一个SQL语句完成不同条件的分组。
有如下数据
国家(country) 性别(sex) 人口(population)
中国 1 340
中国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60
按照国家和性别进行分组,得出结果如下
国家 男 女
中国 340 260
美国 45 55
加拿大 51 49
英国 40 60
普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。
下面是一个是用Case函数来完成这个功能的例子
SELECT country,
SUM( CASE WHEN sex = '1' THEN
population ELSE 0 END), --男性人口
SUM( CASE WHEN sex = '2' THEN
population ELSE 0 END) --女性人口
FROM Table_A
GROUP BY country;
这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。
三,在Check中使用Case函数。
在Check中使用Case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Check。
下面我们来举个例子
公司A,这个公司有个规定,女职员的工资必须高于1000块。如果用Check和Case来表现的话,如下所示
CONSTRAINT check_salary CHECK
( CASE WHEN sex = '2'
THEN CASE WHEN salary > 1000
THEN 1 ELSE 0 END
ELSE 1 END = 1 )
如果单纯使用Check,如下所示
CONSTRAINT check_salary CHECK
( sex = '2' AND salary > 1000 )
女职员的条件倒是符合了,男职员就无法输入了。
分享到:
相关推荐
交互修改
ISO14230-2标准文档,定义了K线通讯方式和数据格式,对于汽车诊断非常有用
学习作者过程中,遇到问题可以咨询解决方案前台地址http://job.gitapp.cn后台地址http://job.gitapp.cn/admin后台管理帐号用户名admin123 密码admin123功能介绍平台采用B/S结构,前端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括首页、岗位详情页、简历中心、用户设置模块。后台功能包括总览、岗位管理、公司管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。代码结构服务器目录编号web目录是前端代码部署运行执行步骤(1)安装python 3.8(2) 安装依赖。进入server目录下,执行 pip install -r requests.txt(3)安装mysql 5.7数据库,并创建数据库,创建SQL如下CREATE DATABASE IF NOT EXISTS xxx DEFAULT CHARSET utf8 COLLATE utf8_general_ci(4)恢复
4602-职业规划设计书PPT护理
非常好的SqlServer查询性能优化教程资料100%好用.zip
基于Springboot+Vue+Python深度神经网络学习算法水质管理预测系统设计毕业源码案例设计Springboot_Vue_Python_水质管理_预测基于Springboot+Vue+Python深度神经网络学习算法水质管理预测系统设计毕业源码案例设计程序开发软件Eclipse/Idea + WebStorm/VsCode + Pycharm 数据库mysql 开发技术Springboot + Vue + Python 这个是一个水质管理和预报系统,它是一个全栈Web应用程序,使用机器学习和深度神经网络算法来预测未来的水质。系统一共有2个身份包括管理员和用户。管理员登录后可以查询最新水质检测数据,也可以上报新的水质数据,可以查询管理历史水质数据,查询历史水质趋势图,训练自己的模型参数,选择一个算法模型结果预测下个月的水质信息,管理所有的用户信息用户登录后比管理员就少了个用户管理功能。管理员账号密码 admin/123 用户账号密码user1/123
单词天天斗 (毕业设计/实战小程序/微信小程序完整项目)介绍该项目基于「微信小程序」原生框架和「微信小程序云开发」实现单词对战类小程序,支持好友对战、随机匹配、人机对战透明不同模式的「对战模式」另外提供「每日对战」词汇」、「生词本」、「排行榜」、「设置」等功能,实现完整的业务闭环。单词库包含从小学、初中、高中、四六级、考研、雅思等常需掌握的词汇,支持自定义词库,支持自定义拓展无限本单词书。技术栈主要为微信小程序、云开发、TypeScript等,从头搭建项目,基于git管理代码版本,使用eslint作为代码格式校验,并对页面进行组件化拆分,前端和云函数均采用TypeScript。实践小程序能力,如用户信息获取、用户登录、全局状态管理、路由、wxs、npm包、播放音频、回复、转发分享、动画、云数据库等。项目提供完整设计稿,项目演示可查看微信小程序「单词天天斗」,扫码体验 ↓这些人毕设参考项目文档齐全、题目合适、技术广度大、业务闭环,包含项目解析文档和教程,这是一个非常适合作为毕设学习的小程序项目。无化部署运营无论你是想通过小程序现变,还是想给自己的「英语课程教材」
内容概要:本文提出了结合强化自我训练(ReST)和响应动作链路(ReAct)的方法来构建并改善大规模语言模型代理的性能,尤其是在需要多步骤推理以解决复杂自然语言查询的任务上。文中定义了一个能够在外部工具/ API /环境交互中表现出色的代理,并提出了一种通过迭代训练以前的轨迹来进行连续自我提升和精炼的技术路径。 适合人群:对大型语言模型研究及应用有兴趣的研究人员和工程师。 使用场景及目标:本方法主要适用于处理需要多个信息检索步骤才能完成的问题解决任务,如基于复杂开放性问答系统的发展。具体目标是在减少所需参数量的前提下提高此类系统的准确性、鲁棒性和效率。 其他说明:作者展示了仅经过两轮迭代优化,即可以从一个大的预训练模型蒸馏出性能相当但大小减少两个数量级的小型化模型。此外,在整个过程中没有使用人类标记的数据进行直接监督。
毕业设计Android,一款水果健康百科app斯戈利毕业设计Android,一款水果健康百科app
移动互联网发展和岗位分析.pptx
数控加工程序设计.pptx
毕业设计基于STM32的智能停车场设计基于STM32的智能停车场设计项目介绍该项目为毕业设计。基于STM32F1平台的智能停车场,板卡划分为主板、控制台指示板及场内红外检测板,支持短信定时报告停车场状态与远程控制、进出场自动电梯停车杆并播报欢迎消息、检测车位和环境温湿度并在屏幕实时显示状态。目前阶段正在进行电路验证设计与打样阶段。预计2月上旬至中旬完成电路设计并进入编码阶段。目前功能概述车辆进场与退场时,语音播报相应的欢迎语句并自动升起停车杆。待车辆完全驶入停车场后,自动降下停车杆。通过红外方式检测车位停车状态,并在门口控制台和相应车位显示停车状态。屏幕显示当前可用车票和当前温湿度每1小时通过短信报告目前停车场车位情况、1小时内车辆进出数量。短信下发控制指令。后续阶段功能车辆停车计费功能。冲卡检测并自动报警功能。加入实时时钟,通过短信安排时间。用户使用场景功能列表模块 功能 商品分类STM32F103VET6 微型系统板 毕业设计使用的开发板 单片机F103VESIM800L模块 支持GPRS短信收发的功能 12864液晶屏
【资源说明】 基于SpringBoot+Vue.js的轻小说在线阅读网站前后端分离全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
“腾达”游戏分享网站的设计与实现_97c7a2s2
大数据与会计 (9)
数学建模matlabppt课件市公开课一等奖百校联赛特等奖课件.pptx
城市轨道交通通信信号技术_
本文中的项目资源均整理自互联网,若侵犯了您的权益,请及时联系博主,博主会及时处理。 项目资源中使用的技术和系统用处不一定准确和全面,我只是大致的浏览了一下,具体使用技术建议参考代码和视频讲解。 资源中的各内容不一定每一个都非常的完美,可能会有少许错误,建议多看几个,选其中一个自己觉得不错的,用来做毕设或者开题等等。 资源中所列论文可以参考,但是不建议且强烈不建议直接照搬照抄,因为毕竟要查重,避免引起不必要的麻烦。
压力表计算机软件及应用it计算机专业资料.pptx
钢材器材破损铁锈检测69-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar钢重用-V4 2024-03-27 5:01 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括1094张图像。 钢元素以可可格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为416x416(拉伸) 应用以下扩展来创建每个源图像的3个版本: *水平翻转的50%概率 *以下90度旋转之一的同等概率:无,顺时针,逆时针方向 * -15%至+15%之间的随机BRIGTHNESS调整 * 0到0.8像素之间的随机高斯模糊