我正在尝试获取具有特定代码的人数。
下面是我现在正在做的一个例子。
select * from persons where code in ('1', '2', '3', '4', '5')
它将向我显示拥有这些数字的in
每个人,但这并不排除任何东西。我不知道如何展示那些只有这些代码而没有别的东西。
希望这有点道理。
为此,您需要查看所有数字。最好的方法是使用group by
and having
:
select personid
from person
group by personid
having sum(case when code not in ('1', '2', '3', '4', '5') then 1 else 0 end) = 0
该having
子句计算不是这些代码的记录数。如果计数为 0,则返回记录。
如果您想确保选择了所有 5 个代码,请使用以下条件:
having sum(case when code not in ('1', '2', '3', '4', '5') then 1 else 0 end) = 0 and
count(distinct code) = 5
这又快又脏,我假设persons表上存在一个ID字段......
select a.*
from persons a
join (select id,count(*) count
from persons b
where code in ('1','2','3','4','5')
group by id
having count()=1) b
on a.id=b.b.id
*编辑:认为我更喜欢这个版本 :) *
这里的想法是只从列表中获取那些只有一个 ID 的人员记录,从而进行计数。将其加入到同一个人员表中,它将列出目标列表中唯一具有该值的记录。