mysql COUNT(xxx OR NULL)中OR NULL作用

本文探讨了SQL中COUNT函数与ORNULL结合使用的原理,解释了为何在统计特定条件数据时需要使用ORNULL。通过一个示例查询,展示了如何统计公司下属站点、设备、计划及不同状态计划的数量,特别是如何根据检查时间过滤数据并按公司分组。了解这一技巧对于优化SQL查询和获取精确统计数据至关重要。
摘要由CSDN通过智能技术生成

下面上一段SQL:

SELECT
	t.company_id AS companyId,
	t.company_name AS companyName,
	COUNT( DISTINCT os.id ) AS stationCount,
	COUNT( DISTINCT opsdr.device_id ) AS deviceCount,
	COUNT( opd.id ) AS planCount,
	COUNT( opd.`status` = '0' OR NULL ) AS oneCount,
	COUNT( opd.`status` = '1' OR NULL ) AS twoCount,
	COUNT( opd.`status` = '2' OR NULL ) AS threeCount,
	COUNT( opd.`status` = '3' OR NULL ) AS fourCount 
FROM
	( SELECT op.company_id, op.company_name FROM op_program op WHERE op.envir_code = 'noise' GROUP BY company_id ) t
	LEFT JOIN op_program op ON op.company_id = t.company_id
	LEFT JOIN op_program_station_ref opsr ON opsr.program_id = op.id
	LEFT JOIN op_station os ON opsr.station_id = os.id
	LEFT JOIN op_program_station_device_ref opsdr ON opsr.id = opsdr.program_station_id
	LEFT JOIN op_plan_details opd ON opsdr.id = opd.program_station_device_id 
	AND opd.check_time >= '2020-01-01'
GROUP BY
	t.company_id

里面的count不带OR NULL时,为统计这个字段的所有数据,此时想要统计该字段不同条件下的数据,就需要加上OR NULL才可以生效,原因:
count里面传递参数计算统计时根本不关心条件表达式里面的返回值,无论传什么都会进行统计,而只有在值为null时才会不统计,此时加上OR NULL会使在OR前面的条件为false时,值为null,进而使mysql跳过这条数据不统计

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值