应用场景: 需要根据印章的不同状态,统计不同状态下印章数量。

刚开始百度,确实写搜到了不同的答案,但只能怪自己对sql语法解读不够,还是没写出来,导致写出了下面错误的写法。

select b.corporateOrgName, b.corporateOrgGuid companyId,count(case when bc.ftype not in(1,2) then 1 else 0 end ) total,count(case when bc.ftype in(3,4,5) then 1 else 0 end ) usetotal,count(case when bc.ftype = 6 then 1 else 0 end ) saveTotal,count(case when bc.ftype = 7 then 1 else 0 end ) returnTotalfrom B_seal_cycle bcjoin B_seal bon bc.sealId = b.idwhere b.corporateOrgName like '%%'group by b.corporateOrgName,b.corporateOrgGuid
select b.corporateOrgName, b.corporateOrgGuid companyId,count(case when bc.ftype not in(1,2) then 1 end ) total,count(case when bc.ftype in(3,4,5) then 1 end ) usetotal,count(case when bc.ftype = 6 then 1 end ) saveTotal,count(case when bc.ftype = 7 then 1 end ) returnTotalfrom B_seal_cycle bcjoin B_seal bon bc.sealId = b.idwhere b.corporateOrgName like '%%'group by b.corporateOrgName,b.corporateOrgGuid

遇到的问题

1、 对case when 语法,解读有误。

加了else 之后,总会对结果取 1 或 0.

2、 count函数都会对不管1 或 0 进行统计。

3、 当加了else 0 之后,可以通过sum函数进行统计。

也可以这样写

select b.corporateOrgName, b.corporateOrgGuid companyId,sum(case when bc.ftype not in(1,2) then 1 else 0 end ) total,sum(case when bc.ftype in(3,4,5) then 1 else 0 end ) usetotal,sum(case when bc.ftype = 6 then 1 else 0 end ) saveTotal,sum(case when bc.ftype = 7 then 1 else 0 end ) returnTotalfrom B_seal_cycle bcjoin B_seal bon bc.sealId = b.idwhere b.corporateOrgName like '%%'group by b.corporateOrgName,b.corporateOrgGuid

补充知识:SQL语言中 执行语句 DESC与DESCRIBE有什么区别?

DESCRIBE TABLE 用于列出指定表或视图中的所有列。

DESCRIBE INDEX FOR TABLE 用于列出指定表的所有索引,

所以 DESCRIBE是用来显示数据结构信息的;

而desc是descend ,是用于查询出结果时候对结果进行排序,是降序排序。

DESCRIBE 是 SHOW COLUMNS FROM 的缩写。

DESCRIBE 提供有关一个表的列信息。col_name 可以是一个列名或是一个包含 SQL 通配符字符 “%” 和 “_” 的字符串。没有必要用引号包围字符串。

一、describe命令用于查看特定表的详细设计信息

例如为了查看guestbook表的设计信息,可用:

describe guestbook describe ol_user userid

二、可通过”show comnus”来查看数据库中表的列名

有两种使用方式:

show columns form 表名 from 数据库名

或者:

show columns from 数据库名.表名

三、用describe命令查询具体列的信息

describe guestbook id 就是查询guestbook中id字段的列信息

{DESCRIBE | DESC} tbl_name [col_name | wild]

DESCRIBE 提供有关一个表的列信息。col_name 可以是一个列名或是一个包含 SQL 通配符字符 “%” 和 “_” 的字符串。没有必要用引号包围字符串。

mysql> descol_user username\G
mysql_connect('localhost'  ,   'root'  ,   'root'   );   mysql_select_db(   'demo'   ); $test = mysql_query('Describe cdb_posts first'); $test = mysql_fetch_array($test);

如果此字段不存在返回的就是NULL,通过这样可以判断一个字段是否存在

更多相关文章

  1. Android(安卓)初识Retrofit
  2. Android系统下如何在程序中对XML里面元素进行赋值
  3. Android中对后台任务线程性能的说明及优化
  4. android图片上传springMvc
  5. android 之simpleAdapter详解
  6. Android(安卓)微博登录
  7. Android中读取电话本Contacts联系人的所有电话号信息
  8. Android模拟 HTTP multipart/form-data 请求协议信息实现图片上
  9. Android模拟 HTTP multipart/form-data 请求协议信息实现图片上

随机推荐

  1. android中json解析及使用(中)
  2. Android FrameLayout
  3. Android获取RecyclerView滑动距离
  4. Android Handler消息处理机制面试5连问
  5. Android拨打电话权限总结
  6. Android中am命令用法
  7. Android(安卓)AlertDialog 无法弹出输入
  8. Android之自定义ProgressBar
  9. Android编译系统(三):官方文档Android Bu
  10. Android中短信拦截解决方案