从表中的列中选择具有相同计数的行

时间:2013-10-11 12:16:09

标签: sql select join

我有一个看起来像这样的表:

Person (Ssn, Name, Age, Petname)

我需要形成一个问题,该问题返回与Ssn = 1的人具有相同宠物数量的所有人的姓名(即如果Ssn = 1的人在Petname中具有Petname =“Zeus”全部还应该退还有宠物的人。我知道桌子设计是愚蠢的,但它来自学校的校对,并且必须看起来像那样。

这是我到目前为止所得到的。我认为这部分是正确的,但我似乎无法完全理解:

SELECT Name 
FROM   Person 
WHERE (SELECT COUNT(Petname) FROM Person WHERE Ssn = '1')
       = (SELECT COUNT(Petname) FROM Person WHERE Ssn != '1');

3 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

SELECT Name
FROM Person
WHERE SSN <> 1
GROUP BY Name
HAVING COUNT(PetName) = (SELECT COUNT(PetName) FROM PERSON WHERE SSN='1')

以下是带有代码的SQLFiddle

答案 1 :(得分:0)

试试这个

select Name from Person 
group by Name 
having 
sum(case when Pnr = '1' then 1 else 0 end) = sum(case when Pnr <> '1' then 1 else 0 end)

答案 2 :(得分:0)

假设一个人只有一只宠物。

SELECT 
    Name
FROM 
    Person 
WHERE 
    PetName = (SELECT Petname FROM Person WHERE Ssn = 1)
    AND Ssn <> 1