如何统计MINUS查询返回的missing_names结果行数?
解决SQL差集结果行数统计问题
问题背景
现有两张数据表:
Ages表:
| Name | Age |
|---|---|
| John | 39 |
| Katherine | 25 |
| Leslie | 75 |
| Gary | 20 |
| Faith | 58 |
City表:
| First_Name | Age |
|---|---|
| John | New York |
| Katherine | Boston |
| Leslie | Miami |
| Pam | Seattle |
| Gary | Chicago |
| Faith | Santa Barbra |
执行以下SQL可得到Ages表中不存在的City表姓名:
select distinct First_Name as missing_names from City minus select distinct Name from Ages
返回结果:
| missing_names |
|---|
| Pam |
但执行select count(distinct First_Name) as missing_names from City minus select distinct Name from Ages时,返回结果为6,不符合预期的1,需要统计差集结果的行数。
错误原因
你写的SQL逻辑顺序错误:先统计了City表中不重复First_Name的总数(6),再将这个单一数值与Ages表的不重复Name集合做差集操作。由于数值6不在Ages的Name集合中,差集结果保留6,这显然不是你要的统计逻辑。
正确SQL写法
需要先执行差集查询得到缺失的姓名列表,再对这个结果集统计行数,子查询是关键:
SELECT COUNT(*) AS missing_names FROM ( SELECT DISTINCT First_Name FROM City MINUS SELECT DISTINCT Name FROM Ages ) AS missing_names_sub;
预期结果
| missing_names |
|---|
| 1 |
内容的提问来源于stack exchange,提问作者Alyssa
相关产品推荐
相关产品推荐

