【问题标题】:Select rows with the same count in a column from a table从表的列中选择具有相同计数的行
【发布时间】:2013-10-11 12:16:09
【问题描述】:

我有一个如下所示的表格:

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');

【问题讨论】:

  • 自己做功课。这样你会学到更多。
  • 抱歉,Pnr 是瑞典语版本的 Ssn。忘记翻译了。关于自己做作业的评论。我连续坐了两个小时试图弄清楚。我同意您可以从自己做的事情中学到更多,但是当您真的无法弄清楚时,您必须寻求帮助。

标签: sql select join


【解决方案1】:

这应该可以解决问题:

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

这里还有一个SQLFiddle 的代码。

【讨论】:

  • 好的,这似乎可行。 have 子句确实让它变得容易多了。感谢您的帮助
【解决方案2】:

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

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

【讨论】:

  • 为什么要假设这样的事情?
【解决方案3】:

试试这个

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多