SQL查询:筛选OA表中不在CUSTOMER表的坐标及统计客户数
解决OA表坐标筛选及客户数量统计问题
一、筛选未出现在CUSTOMER表address字段中的OA表坐标
你之前用INNER JOIN只会返回两边匹配的记录,要找CUSTOMER表中没有的OA坐标,可以用以下两种常用方法:
方法1:LEFT JOIN + IS NULL
SELECT oa.coordinate FROM OA oa LEFT JOIN CUSTOMER c ON oa.coordinate = c.address WHERE c.address IS NULL;
原理:LEFT JOIN会保留OA表的所有记录,CUSTOMER表中匹配不到的记录,对应address字段会是NULL,通过WHERE筛选出这些NULL的记录,就是目标坐标。
方法2:NOT EXISTS子查询
SELECT coordinate FROM OA oa WHERE NOT EXISTS ( SELECT 1 FROM CUSTOMER c WHERE c.address = oa.coordinate );
原理:对OA表的每个坐标,检查CUSTOMER表中是否不存在匹配的address值,不存在则返回该坐标。
二、统计每个坐标对应的客户数量
可以通过关联分组统计实现,不管坐标是否在CUSTOMER表中存在,都能得到对应的客户数(不存在的坐标客户数为0):
SELECT oa.coordinate, COUNT(c.address) AS customer_count FROM OA oa LEFT JOIN CUSTOMER c ON oa.coordinate = c.address GROUP BY oa.coordinate;
原理:LEFT JOIN保留OA所有坐标,COUNT(c.address)会自动忽略NULL值(即匹配不到的情况),通过GROUP BY按坐标分组,就能得到每个坐标对应的客户数量。
内容的提问来源于stack exchange,提问作者user20638149
相关产品推荐
相关产品推荐

