0

我正在尝试获取具有特定代码的人数。

下面是我现在正在做的一个例子。 select * from persons where code in ('1', '2', '3', '4', '5')

它将向我显示拥有这些数字的in每个人,但这并不排除任何东西。我不知道如何展示那些只有这些代码而没有别的东西。

希望这有点道理。

4

2 回答 2

0

为此,您需要查看所有数字。最好的方法是使用group byand 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
于 2013-02-27T20:51:49.320 回答
0

这又快又脏,我假设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 的人员记录,从而进行计数。将其加入到同一个人员表中,它将列出目标列表中唯一具有该值的记录。

于 2013-02-27T20:52:20.153 回答