【问题标题】:Using HAVING to restrict results when using GROUP BY on multiple columns在多列上使用 GROUP BY 时使用 HAVING 限制结果
【发布时间】:2014-07-03 01:32:19
【问题描述】:

给定医生和患者互动日期列表 (VisitSchedule),我想选择所有看过超过 2 名独特患者的医生。我的问题是,为了隔离医生/患者,我需要按医生和患者分组。然后我如何限制结果,只返回Dr. Moody?因为他已经看过三 (3) 名独特的患者,而 Dr. Franks 只看过两 (2) 名独特的患者,尽管他总共访问的次数更多?

Physician      Patient       VisitDate
-------------------------------------
Dr. Moody      Danny         5/1/2013
Dr. Moody      Danny         5/3/2013
Dr. Moody      Danny         5/7/2013
Dr. Moody      Paul          4/11/2013
Dr. Moody      Paul          5/10/2013
Dr. Moody      James         5/1/2013
Dr. Franks     Allison       4/18/2013
Dr. Franks     Allison       4/24/2013
Dr. Franks     Tammy         4/11/2013
Dr. Franks     Tammy         4/14/2013
Dr. Franks     Tammy         5/11/2013
Dr. Franks     Tammy         5/12/2013
Dr. Franks     Tammy         5/17/2013

SELECT Physician
FROM VisitSchedule
GROUP BY Physician, Patient
HAVING (COUNT(Physician) > 2)

我是否错误地使用了COUNT

请注意,我的last question 与此相关,但我意识到我没有正确解释两列的分组。我试图简化这个问题,以免它过于冗长,但我最终过度简化它。

附:如果有人对“SQL Puzzle”书籍有任何建议可以帮助练习此类问题,那就太好了。

【问题讨论】:

  • SELECT Physician FROM VisitSchedule GROUP BY Physician HAVING COUNT(DISTINCT Patient) > 2
  • @Lamak 值得回答
  • @MichaelBerkowski 实际上是在尝试查找重复项,因为我确定之前有人问过这个问题
  • @Lamak 可能是这样,但解释为什么 Patient 不应出现在 GROUP 中是有用且与众不同的
  • @MichaelBerkowski 是的,我知道,这就是为什么我实际上没有发布答案,但仍然想帮助操作

标签: sql sql-server


【解决方案1】:

你开始的很好,这个查询应该结束了:

SELECT
    vs.Physician

FROM
    VisitSchedule vs

GROUP BY
    vs.Physician

HAVING
    COUNT(DISTINCT vs.Patient) > 2

【讨论】:

  • 你为什么用vs.作为所有东西的前缀?,这会失败
  • FROM 部分是这样工作的吗?!我从未见过这样分配的别名...
  • 同意 lamak,它需要“FROM VisitSchedule vs”来分配别名。
  • @Lamak:我的错误,已经纠正了。感谢您指出这一点!
  • @timo.rieber @Lamak - 非常感谢! group by 有时真的把我搞砸了。
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 2016-07-23
相关资源
最近更新 更多