我们都知道SQL中适用case when then来转化数据库中的信息

比如  select (case sex when 0 then '男' else '女' end) AS sex  from studentInfo

那么在集合函数中它有什么用呢 ?

假设数据库有一张表名为student的表。

如果现在要你根据这张表,查出江西省男女个数,广东省男生个数,浙江省男女个数 怎么写SQL语句?

答案是:

select sex ,

  count ( case province when '广东省' then '广东省' end )as 广东省 ,

  count ( case province when '江西省' then '江西省' end )as 江西省 ,

  count ( case province when '浙江省' then '浙江省' end )as 浙江省

  from student group by sex

count()函数即根据给定的范围和group by(统计方式) 而统计行数据的条数

我们一步步来理解上面语句

1.  select sex from student (查询数据表中的存在的男女条数)

2.select sex, count (*) as num from student group by sex  (查询表中男女数量)

3.select sex ,province, count (*)as num from student group by sex,province (查询各省男女数量)

  重点来了,如果我把count(*) 中的 *号换成任一列名呢? 如count(province) 会怎样?

4.select sex ,province, count (province)as num from student group by sex,province (查询各省男女数量)

  又有count (province)等价于 count(case province when '浙江省' then '浙江省' else province end )

  但是如果我们缩小范围呢即count(case province when '浙江省' then '浙江省' end ) 那么请看下面

5.select sex ,province, count ( case province when '浙江省' then '浙江省' end )as num from student group by sex,province

  即统计男女数量范围限定在浙江省 再精简一下即下面

6.select sex, count ( case province when '浙江省' then '浙江省' end ) as 浙江省 from student group by sex

  已经接近我们的要求了,现在只要加上另几个字段就是了

7.select sex ,count ( case province when '广东省' then '广东省' end )as 广东省 ,count ( case province when '江西省' then '江西省' end )as 江西省 ,count ( case province when '浙江省' then '浙江省' end )as 浙江省 from student group by sex

  小结:当然实现有很多种方法 可以多个子查询拼接起来也不无可厚非。我这只是一种思路

  补充:case when then 知识点

  (1) select (case province when '浙江省' then '浙江' when '江西省' then '江西' end  ) as 省份 from student

  如果默认范围如果没全包含则为空

  (2)select (case province when '浙江省' then '浙江' when '江西省' then '江西' else province end  ) as 省份 from student

Eg:查找每个订单中的报告情况

select id,ORDER_ID,
count(case STATUS when 'F' then true end ) as '已发送报告' ,
count(case STATUS when 'D' then true end ) as '已生成报告',
count(case STATUS when 'T' then true end ) as '未生成报告',
max(SERVICE_CNT) as '共计服务次数'
from APP_NUTRITION_SERVICE_DETAIL where DELETE_MARK='N' and ORDER_ID in(2016042501,2016042502) group by ORDER_ID
结果:array
(
[0] => Array
(
[id] => 6
[ORDER_ID] => 2016042501
[已发送报告] => 4
[已生成报告] => 1
[未生成报告] => 0
[共计服务次数] => 5
)
[1] => Array
(
[id] => 8
[ORDER_ID] => 2016042502
[已发送报告] => 1
[已生成报告] => 1
[未生成报告] => 0
[共计服务次数] => 2
)

 

 

selectid,ORDER_ID,count(caseSTATUSwhen'F'thentrueend)as'已发送报告',count(caseSTATUSwhen'D'thentrueend)as'已生成报告',count(caseSTATUSwhen'T'thentrueend)as'未生成报告',max(SERVICE_CNT)as'共计服务次数'fromAPP_NUTRITION_SERVICE_DETAILwhereDELETE_MARK='N'andORDER_IDin(2016042501,2016042502)groupbyORDER_ID

case when then 与 count联合使用的更多相关文章

  1. group by 和count 联合使用问题

    工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来统计的数量和想要的数量不正确. count统计的数量是被group by 分组以后每一组中数据的数量 ...

  2. group by和count联合使用问题

    要根据用户发布的产品数量来排序做分页,使用group ) FROM( SELECT uid,COU 工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来 ...

  3. PostgreSQL的查询技巧: 零除, GENERATED STORED, COUNT DISTINCT, JOIN和数组LIKE

    零除的处理 用NULLIF(col, 0)可以避免复杂的WHEN...CASE判断, 例如 ROUND(COUNT(view_50.amount_in)::NUMERIC / NULLIF(COUNT ...

  4. count(*) vs count(1)--social.msdn.microsoft.com

    Clever response Dave, but insufficient. I'll admit I've suggested this myself for certain questions ...

  5. mysql 聚集函数 count 使用详解(转载)

    本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName)2.distinct 与 count 连用3.group by (多个字段) 与 ...

  6. 数据分组、统计 case when then else end

    case when 对表进行条件分组 case简单函数 case   age  when   then select name , sex , age , ( case age /*when 条件成立 ...

  7. mysql 聚集函数 count 使用详解

    mysql 聚集函数 count 使用详解 本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName) 2.distinct 与 coun ...

  8. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  9. nyoj 1022 合纵连横【并查集节点的删除】

    合纵连横 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法 ...

随机推荐

  1. -_-#【CSS 优化】

    高性能CSS 关于css通配符性能问题不完全测试 CSS的渲染效率 border: none; /* 不写 border: 0; 但几乎都是写 border: 0;的.. */ 不要使用过小的图片做背 ...

  2. 清理Xcode中无用的 Provisioning Profile.

    Xcode中如果添加过多个开发者账号, 慢慢就会发现 Provisioning Profile 有很多, 无用的 Provisioning Profile Xcode也不会自动删除, 想要清理的话, ...

  3. iOS开发 .framework的Optional(弱引用)和Required(强引用)区别, 有错误 Library not found………………

    http://www.cnblogs.com/wanyakun/p/3494323.html 强引用(Required)的framework是一定会被加载到内存的,但是弱引用(Optional)的fr ...

  4. 【转】Xcode重构功能怎么用我全告诉你

    原文网址:http://www.cocoachina.com/ios/20160127/15097.html 你会经常需要重构你的代码,让它有更好的结构,可读性或者提高可维护性.Xcode作为IDE其 ...

  5. From delegates to lambdas z

    I thought of naming this post “Evolution of lambdas in C#”, then I decided that wouldn’t be closest ...

  6. jquery 列求和

    列求和 var m = 0; $('#tb tr').each(function () { //td:eq(3)从0开始计数 $(this).find('td:eq(3)').each(functio ...

  7. JavaScript性能优化:度量、监控与可视化1

    HTTP事务所需要的步骤: 接下来,浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接,类似对讲机的Over(完毕) Roger(明白) TCP/IP模型 TCP即传输控制协议( ...

  8. PHP字符串替换函数strtr()

    strtr函数比str_replace函数的效率要高很多,strtr()的两种定义方式: strtr(string, from, to)和strtr(string, array)1.strtr区分大小 ...

  9. Apple LLVM 6.0 Warning: profile data may be out of date

    I have no clue what this meant, so I googled the problem. I only ended up with some search results s ...

  10. Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括:    Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...