[英]Filter out results if a value exists in any of the rows in another table sql
我试图计算有多少对象出现在表 2 中,但状态为 3 或 5。因此,如果它的状态为 3 或 5,我想将其排除在计数之外。 我被卡住的地方是有重复的值,因为它们可能有多个状态。 下面进一步解释。
Table 1
Object_ID
1
2
3
4
5
Table 2
ID | object_id | status
1 2 2
2 2 3
3 2 5
4 3 2
5 3 2
6 3 7
最终目标
计算有多少 object_ids 的状态不包括 3 或 5。但也要忽略重复项。 在此示例中,总计数为 1(object_id 为 3)。 因为我需要找到表 2 中的所有行,所以基本上将它们合并在一起,假设它们的状态都不是 3 或 5。
Count. | object_id
1 | 3
SELECT Count(distinct(object_id))
FORM table_2
WHERE status <> 3 or status <> 5
如果状态是 3 或 5,我似乎可以将它们分组,但我似乎无法排除它们。
希望这是有道理的,我试图简化它,所以我没有包含不相关的代码。
一种没有子查询的方法是:
select count(distinct object_id) - count(distinct case when status in (3, 5) then object_id end)
from table_2;
这将计算不同 object id 的数量,然后减去具有指定状态的不同 object id 的数量。
更典型的是,我会通过两个级别的聚合来解决这个问题:
select count(*)
from (select object_id
from table_2
group by object_id
having sum( status in (3, 5) ) = 0
) o
您可以使用聚合:
select count(*)
from (
select object_id
from table2
group by object_id
having max(status in (3, 5)) = 0
) t
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.