时间:2021-05-23
应用场景: 需要根据印章的不同状态,统计不同状态下印章数量。
刚开始百度,确实写搜到了不同的答案,但只能怪自己对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你看出不同之处了嘛? 把else 0 去掉就得到了正确的结果。
遇到的问题
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 是 SHOW COLUMNS FROM 的缩写。
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);$test[0]返回的是该字段的名称,比如我要查询first字段,返回的就是first
如果此字段不存在返回的就是NULL,通过这样可以判断一个字段是否存在
以上这篇在SQL中对同一个字段不同值,进行数据统计操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
复制数据库表中两个字段数据的SQL语句今天为表新添加一个字段,但又想与表中的另一个字段值相同,由于数据过多想通过sql语句实现,经测试下面的这句话确实很好用。复
MySQL中,如何使用SQL语句来对表中某一个字段进行重命名呢?我们将使用altertable这一SQL语句。重命名字段的语法为:altertablechang
在list中嵌套元组,在进行sort排序的时候,产生的是原数组的副本,排序过程中,先根据第一个字段进行从小到大排序,如果第一个字段相同的话,再根据第二个字段进行
编写Django的form表单,非常类似我们在模型系统里编写一个模型。在模型中,一个字段代表数据表的一列,而form表单中的一个字段代表中的一个元素。一,for
显卡gtx表示这块显卡的性能在同一系列(注意是同一个系列,不同系列的话另当别论)中属于中、高端或者高端型号。GTX是NVIDIA的一个字母代号,凡是NVIDIA