实例演示:

  (1)查询表users中的数据。

  select u.id,u.realname,U.SEX from users u;

  查询结果如下

  ID    REALNAME SEX

  1  10082 松XX

  2  10084 林XX     1

  3  10087 西XX

  4  10100 胡XX

  5  10102 龙XX     1

  ......

  (2)上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用CASE语句。

select u.id,u.realname,U.SEX,

  ( case u.sex

  when 1 then '男'

 

when 2 then '女'

  else '空的'

  END

  ) 性别

from users

u;

  查询结果

  ID    REALNAME SEX  性别

  1 10082 松XX         空的

  2 10084 林XX     1   男

  3 10087 西XX         空的

  4 10100 胡XX         空的

  5 10102 龙XX     1   男

  ......

  如果不希望列表中出现"sex"列,语句如下

select u.id,u.realname,

( case u.sex

when 1 then '男'

when 2 then

'女'

else '空的'

END

) 性别

from users u;

  (3)将sum与case结合使用,可以实现分段统计。

  例如现在我希望将上表中各种性别的人数进行统计,sql语句如下

select

sum( case u.sex when 1 then 1 else 0 end) 男性,

sum( case u.sex

when 2 then 1 else 0 end) 女性,

sum( case when u.sex<>1 and

u.sex<>2  then 1 else 0 end) 性别为空

from users

u;

  执行结果如下

  男性  女性  性别为空

  1 41    15   0

  如果学校内有数千名学生进行了考试,想统计60分以下、60-80分、80-100分的总人数,就可以使用这样的语句来实现。只是条件不同而已。

  (4)如果sum、case when结合group by使用,可以进行分组分段统计。

  如,我希望统计users表中每个创建者创建的男性、女性、无性别的用户总数(数据表中有一个字段creator_id,表示创建者的ID),语句如下

select u.creator_id 创建者ID,

sum( case u.sex when 1 then 1 else 0 end)

男性,

sum( case u.sex when 2 then 1 else 0 end) 女性,

sum( case when

u.sex<>1 and u.sex<>2  then 1 else 0 end) 性别为空

from users

u

group by u.creator_id;

  查询结果如下

  创建者ID 男性 女性 性别为空

  1          0    0   0

  2 10000    35   12  0

  3 11100    0    0   0

  4 11060    0    0   0

  5 11040    0    0   0

  6 11080    2    0   0

  7 10281    3    3   0

  8 10580    1    0   0

  上例中只有一个分组字段,实现了1级统计;如果有多个分组字段,应该可以实现多级统计了。如有居民统计表,保存了人口信息、人口所在市、区、街道信息等,欲统计深圳市的人口数据,实现统计如下统计结果的话,就可以通过多级分组实现。

  区划    男性居民     女性居民

  深圳市            

  南山区           



  粤海           

  科技           

  宝安区           

  新安

  (5)case when的语法

CASE

WHEN <A> THEN <somethingA>

WHEN <B> THEN

<somethingB>

ELSE

<somethingE>

END

Oracle中CASE WHEN的用法实例的更多相关文章

  1. oracle中case...when的用法

    全表的内容 case...when可以解决在显示的时候想显示别的名称的例子, 用的最多的地方就是性别, 比如上面的表中的性别是由'1'和'0'表示的, 但是实际显示出来在页面上给客户看是不可取的, 这 ...

  2. Oracle中Merge into的用法实例讲解

    最近在做一个需求,就是涉及到表的问题,前端传过来一条数据,根据主键,查询数据库,如果不存在,那么久插入到数据库中一条,如果存在的话,就是以主键的方式,对数据库中的数据,进行更新. 拿到这个需求的时候, ...

  3. Oracle中rownum的基本用法

    Oracle中rownum的基本用法 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且r ...

  4. Oracle 中 CONTAINS 函数的用法

    Oracle 中 CONTAINS 函数的用法 1. 查询住址在北京的学生 SELECT student_id,student_name FROM students WHERE CONTAINS( a ...

  5. mysql数据库中case when 的用法

    场景1:比如说我们在数据库存了性别的字段,一般都是存0 和 1 代表男和女   然后我们会得到0和1之后在java中判断 ,很麻烦有么有?其实我们完全可以在sql中判断好之后拿来现成的.就是在sql中 ...

  6. [转载]Oracle中TO_NUMBER()函数的用法

    1 用法简介TO_NUMBER函数()是Oracle中常用的类型转换函数之一,主要是将字符串转换为数值型的格式,与TO_CHAR()函数的作用正好相反. To_number函数的格式如下: To_nu ...

  7. 【SQL】SQL中Case When的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 ' T ...

  8. Oracle中 to_date和to_char用法

    to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,& ...

  9. Oracle中to_number()函数的用法

    to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...

随机推荐

  1. Android Studio之Activity切换动画(三)

    1.上一篇文章"Android Studio之多个Activity的滑动切换(二)"中实现了多个activity之间的滑动切换,可是新切换出的activity大多是从右側进入 2. ...

  2. 建立第一个Sencha Touch应用

    准备 开始开发前,请先到下面的地址下载Sencha Touch 2的包:http://www.sencha.com/products/touch/download/ .下载完解压后你会发现包里有很多文 ...

  3. 如何将安卓手机中已安装的应用导出一个apk安装包

    首先安装ES文件浏览器 然后应用里找到你要导出apk的应用,长按应用,备份应用, 然后在upbacks/apps文件夹里找吧 不得不说 ES浏览器还是屌啊

  4. UVA 10042 Smith Numbers(数论)

    Smith Numbers Background While skimming his phone directory in 1982, Albert Wilansky, a mathematicia ...

  5. Linux下查看系统CPU个数、核心数、线程数

    1.查看物理CPU个数 (env) root@vmware01:~# grep 'physical id' /proc/cpuinfo physical physical physical physi ...

  6. angular input file 上传文件

    <body > <div ng-controller="fileCtrl"> <form ng-submit="submit(obj)&qu ...

  7. 【BZOJ2729】[HNOI2012]排队 组合数

    [BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...

  8. mybatis学习总结(二)——配置

    在mybatis中要构建sqlSessionFactory对象,让它来产生SqlSession,而在mybatis-spring中,SqlSession的产生是通过SqlSessionTemplate ...

  9. 2014 ACM-ICPC Beijing Invitational Programming Contest

    点击打开链接 Happy Reversal Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      J ...

  10. CISCO-从路由器上下载IOS

    准备工作:一台装有TFTP服务器的PC,一台带有IOS的路由器,并用网线连接上 设置路由器接口和计算机网卡的IP地址在同一网段,并且互相能ping通. 1,安装Cisco TFTP Server 2, ...