数据库之Case When
近期几天的工作本来组长是安排我用mindfocion画几个图,本来以为难点是这个控件的使用,可是开发的时候才发现由于数据量有点多,所以在开发的时候汇总这些信息倒是费了我许多的功夫,最后总结一下就是写了几个SQL语句,这里与大家分享一下。假设有须要用的就太好了。
先说一下需求,组长让我画一个图。要求是把近期几年的**信息统计一下,比如2012年这个**交接了多少次,2013年多少次,总共多少次。想想也不难是吧,于是组长问我怎么样,我就轻松的接下来了。
可是曾经一直接触的是简单的SQL语句和一些EntityFramework等工具,对于SQL语句就真的把我难住了。写了一天的SQL语句,也是没有达到想要的效果。后来上网看了一下,原来SQL里边有一个Case When语句。
用途
当我们在写SQL语句的时候,假设遇到这么一种情况,就是假如。
。。
。则。
。
。,否则。
。
。
。比如,增加是城市是北京,就返回时中国城市,假设是东京,就返回日本城池。否则返回西欧城市。
这个请款下我们就能够用到这个,比例如以下边的小样例。
select
case when t.name = '北京' then '中国'
case when t.name = '东京' then '日本'
else '西欧'
end
from test1 t
当然这还是一个简答的应用,比如我这次项目中用的CaseWhen的使用方法。就用到了条件筛选和SQL语句,比如我要查询2014年叫lisi的人有多少,2015年lisi的人有多少。那么下边的语句就能帮我简单的实现
select to_char(t.birthday ,'yyyy'),
sum(case when to_char(t.birthday ,'yyyy')= '2014' and t.name = 'lisi' then 1
when to_char(t.birthday ,'yyyy')= '2015' and t.name = 'lisi' then 1
else 0
end) as firYear
from test1 t group by to_char(t.birthday ,'yyyy');
大家自己观察发现我在上边用到了Group by来进行分组。由于假设没有这个的话,查询出来的结果例如以下图
可是假设使用了group by分组的话,效果例如以下
实现的效果不一样,所以大家须要什么样子的表格。就怎么查询就能够。
事实上上边说了这么多,好像就是一个if...else...,可是这个是全部数据库都能够实现的。可是在Oracle。另一个类似于咱们的三目运算的一个小语法。
select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')
from employees;
当然假设咱们的逻辑简单能够用这个,只是逻辑略微复杂一些的建议不要用,感觉没有CaseWhen的逻辑清晰,并且代码的移植性也不太好。毕竟仅仅有Oracle能用。
总结一下,假设我们须要在数据库中进行逻辑推断。不防用一下咱们的CaseWhen,或者Oracle的decode。加上group by 效果更佳。
数据库之Case When的更多相关文章
- 数据库编程Case when
数据库编程题 1. 姓名 日期 是否上班 张三 星期二 是 张三 星期三 是 李四 星期一 是 王五 星期二 是 张三 星期二 是 写出一条SQL语句输出下列结果 姓名 星期一 星期二 星期三 张三 ...
- 反爬统计 数据库 sql CASE
-- 经排查日志,发现ordertest.com下的url检测,频繁<Response [403]>,Forbidden;再进一步查询数据库数据:逐日统计错误临时表test_error_t ...
- 数据库的case when 使用实例
本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50471210 需求很简单,我有一个部门和部门的请假申请表.表数据简 ...
- mysql数据库中case when 的用法
场景1:比如说我们在数据库存了性别的字段,一般都是存0 和 1 代表男和女 然后我们会得到0和1之后在java中判断 ,很麻烦有么有?其实我们完全可以在sql中判断好之后拿来现成的.就是在sql中 ...
- sql 查看数据库物理文件路径
方式一:用于查询all数据库,适用于SQL2005及以上版本. USE [Master] GO /****** 对象 : Table [dbo].[Master] 脚本日期 : 06/29/2 ...
- mysql-函数CASE WHEN 语句使用说明
mysql数据库中CASE WHEN语句. case when语句,用于计算条件列表并返回多个可能结果表达式之一. CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以 ...
- PowerDesigner概述(系统分析与建模)以及如何用PowerDesigner快速的创建出这个数据库
PowerDesigner是Sybase公司推出的一个集成了企业架构,UML(统一建模语言)和数据库的CASE(计算机辅助软件工程)工具.它 不仅可以用于系统设计和开发的不同阶段(即业务分析,概念模型 ...
- 21.Android之SQLite数据库学习
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...
- mysql中 case when的使用
SELECT a.hsid, a.house_code, a.sale_date, a.pjid, COUNT( sdid ) AS num, b.hsid, b.pscid, b.hscode, b ...
随机推荐
- 【翻译自mos文章】 在错误的从os级别remove掉 trace file 之后,怎么找到该trace file的内容?
在错误的从os级别remove掉 trace file 之后,怎么找到该trace file的内容? 參考原文: How to Find the Content of Trace File Gener ...
- IOS之UITableView——怎样刷新父页面的Cell
问题:评论数同步 在社交相关的项目中常常有这种主页面,主列表的Cell中有赞数.评论数,详情页顶部也是相同的一个Cell,下部有评论列表,评论添加或降低.详情页的评论数随之改变,返回主列表,主列表的相 ...
- ubuntu16.04+caffe训练mnist数据集
1. caffe-master文件夹权限修改 下载的caffe源码编译的caffe-master文件夹貌似没有写入权限,输入以下命令修改: sudo chmod -R 777 ~/caffe-ma ...
- React 父组件触发子组件事件
Parent组件 import React from "react"; import Child from "./component/Child"; class ...
- 25.QT进度条
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> 5 #include <QProgressBar&g ...
- 为IT程序员量身定制的12个目标——很经典
对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前.新年伊始,我整理了12个月的目标,每个目标都是对技术或个人能力的挑战,而且可以年复一年循环使用. 01. 变得有耐心 02. 保持健康 ...
- python中数字的排序
lst = [2,22,4,7,18]for j in range(len(lst)): #记录内部排序的次数 i = 0 while i < len(lst)-1: if lst[i] > ...
- Neo4j沙盒实验申请过程步骤(图文详解)
不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793632 (对此表示感谢) 前期博客 我暂时是将Neo4j ...
- win32应用禁止改变窗口大小方法
一种简单的处理方法是在调用CreateWindow函数时指定的窗口样式中去掉WS_THICKFRAME样式. 如果你使用的样式中已经包含该样式,例如WS_OVERLAPPEDWINDOW,我们可以將W ...
- Book---强连通分量
这几天一直在做强连通,现在总结一小下 1.定义 在一个有向图中,如果任意的两个点都是相互可达的,就说这个图是强连通的,有向图的极大强连通子图,称为强连通分量 2.求法 学的是白书上的tarjan算法 ...