人本善良

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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
96果林椰子

写了 4561 字,被 3 人关注,获得了 15 个喜欢

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

posted on   简简单单2018  阅读(8432)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示