• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    在SQL中对同一个字段不同值,进行数据统计操作

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

    刚开始百度,确实写搜到了不同的答案,但只能怪自己对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 ) returnTotal
    from B_seal_cycle bc
    join B_seal b
    on bc.sealId = b.id
    where 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 ) returnTotal
    from B_seal_cycle bc
    join B_seal b
    on bc.sealId = b.id
    where 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 ) returnTotal
    from B_seal_cycle bc
    join B_seal b
    on bc.sealId = b.id
    where 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> 
    desc
    ol_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中对同一个字段不同值,进行数据统计操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • mysql批量更新多条记录的同一个字段为不同值的方法
    • MySQL根据某一个或者多个字段查找重复数据的sql语句
    • mysql查询表里的重复数据方法
    上一篇:在sql中对两列数据进行运算作为新的列操作
    下一篇:MySQL5.7.31 64位免安装版使用教程图解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    在SQL中对同一个字段不同值,进行数据统计操作 在,SQL,中,对,同一个,字段,