abc table -
ID
---
1
2
3
xyz table -
abc_id | flag
--------------
1 | 0
1 | 1
2 | 0
3 | 0
3 | 0
我需要不同abc_id的计数,如果对于特定的abc_id,如果flag = 1,则不应计算该id。 在上面的例子中,计数应该是2.有什么办法可以实现吗?对不起,如果之前已经回答了问题,或者问题是否明显。在此先感谢^^
编辑:基本上我想在计数中忽略abc_id = 1,因为其中一个标志= 1.我希望它足够清楚:|
答案 0 :(得分:0)
主要问题是找出你的意思,但我很确定就是这样。 :O)
计算不同的abc_id
,完全排除至少有一行被标记的ID。所以id 1被排除在外,因为它有一个标志。
您可以使用not in
条件解决此问题,以排除所有已标记的ID。之后,您可以使用count(distinct abc_id)
计算剩余行数,以获取不同ID的数量。
select
count(distinct abc_id) as non_flagged_id_count
from
xyz x1
where
abd_id not in
(select x2.abc_id from xyz x2 where x2.flag = 1)
答案 1 :(得分:0)
select count(distinct abc_id)
from xyz as x
left join (
select abc_id from xyz where flag = 1
) as y using (abc_id)
where y.abc_id is null
;