我有一个看起来像这样的表:
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');
答案 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