zoukankan      html  css  js  c++  java
  • Mysql count+if 函数结合使用

    Mysql count+if 函数结合使用

    96 
    果林椰子 
    2017.05.18 13:48* 字数 508 阅读 148评论 0

    涉及函数

    count函数

    mysql中count函数用于统计数据表中的行的总数,或者根据查询结果统计某一列包含的行数,常见的用法如下 count(*) 计算表的总行数,包括空值 count(字段名) 计算指定列下的总行数,忽略空值(这点很重要,后面我们将利用这个特性)

    if(expr, v1, v2)函数

    if(expr, v1, v2) 函数的意思是,如果表达式expr为true(expr<>0 and expr <> NULL),则if()返回的是v1,否则返回v2

    组合上述两个函数,可以在一条语句中统计出满足不同条件的行数

    业务场景:在一个表中记录了不同出版社所拥有的所有的书,以及每本书对应的类型。

    表结构如下: 

    id    press            bookName                      bookTyoe 


    1      新华出版社  《Thinking in Java》    计算机类


    现需统计出不同出版社的里面不同类型的书籍的总量

    例:统计不同出版社中文学类书籍数量

    select count( if( bookTyoe = ‘文学类’, id, null ) ) from table group by press

    分析:当type=1时,会返回对应的id的值,否则放回null,对于指定列的count函数,null是被忽略的,这样就得到了我们想要的统计数量了。 

    同理,统计不同出版社中科幻类+计算机书籍数量:

    select count( if( bookTyoein (‘科幻类’, ‘计算机书籍’), id, null ) ) from table group by press

    如果是联表查询,返回结果中的id不是唯一的话,想要去掉重复的id再统计,还可以在if前面加上DISTINCT,即 count( DISTINCT if( type in (2, 3), id, null ) )

    等效写法 count( DISTINCT (type = 2  and  type = 3)  or null ) 

    也可以使用sum+if替代上述写法

    select sum( if( bookTyoeinin (‘科幻类’, ‘计算机书籍’), 1, 0 ) )from table group by press

     Mysql

    小礼物走一走,来简书关注我

  • 相关阅读:
    Js获取当前日期时间及其它操作
    Java JDBC 基础知识
    java自动创建多级目录
    [Java]读取文件方法大全
    table固定首行(二)
    table固定首行(一)
    DIV滚动条
    查看本机开放的端口号,查看某个端口号是否被占用,查看被占用的端口号被哪个进程所占用,如何结束该进程
    DWZ SSH2 菜单树--使用Struts2 标签(iterator/set/if 组合使用)
    synchronized与lock,哪个效率更高
  • 原文地址:https://www.cnblogs.com/zengpeng/p/8010794.html
Copyright © 2011-2022 走看看