带有两个 INNER JOINS 的 SQL 查询抛出 HAVING COUNT
Posted
技术标签:
【中文标题】带有两个 INNER JOINS 的 SQL 查询抛出 HAVING COUNT【英文标题】:SQL query with two INNER JOINS throws off HAVING COUNT 【发布时间】:2015-11-06 19:17:25 【问题描述】:我正在 Rails 应用程序中设置查询,以仅查看至少有 3 个接受的保险提供商的 care_providers。
http://sqlfiddle.com/#!9/7ce431/13
SELECT `care_providers`.id, name, COUNT(`accepted_insurance_providers`.insurance_provider_id)
FROM `care_providers`
INNER JOIN `accepted_insurance_providers` ON `care_providers`.id = `accepted_insurance_providers`.care_provider_id
GROUP BY `care_providers`.id
HAVING COUNT(`accepted_insurance_providers`.insurance_provider_id) >=3
ORDER BY `care_providers`.id ASC
;
上面的小提琴是查询应该如何工作的。它仅返回“提供商 1”,因为其他提供商接受的保险提供商少于 3 个。
当然,我需要对查询进行许多其他条件,这些条件需要与其他表进行 INNER JOIN。一旦我添加了一个额外的 INNER JOIN,我的 COUNT 就会被丢弃,并且我会让提供者通过我不应该的 HAVING COUNT 标准。
http://sqlfiddle.com/#!9/7ce431/12
SELECT `care_providers`.id, name, COUNT(`accepted_insurance_providers`.insurance_provider_id)
FROM `care_providers`
INNER JOIN `accepted_insurance_providers` ON `care_providers`.id = `accepted_insurance_providers`.care_provider_id
INNER JOIN `care_providers_coverage_zip_codes` ON `care_providers_coverage_zip_codes`.care_provider_id = `care_providers`.id
GROUP BY `care_providers`.id
HAVING COUNT(`accepted_insurance_providers`.insurance_provider_id) >=3
ORDER BY `care_providers`.id ASC
;
您可以从这个小提琴中看到,“Provider 1”现在显示计数为 6,而“Provider 2”显示计数为 4。
关于如何构造它以获得我需要的计数有什么想法吗?如果有一种简单的方法可以将其作为 ActiveRecord 中的范围来处理,则非常感谢,但我也会接受 SQL 答案。
【问题讨论】:
【参考方案1】:解决这个问题的快速简便的方法——可能——是使用count(distinct)
:
HAVING COUNT(DISTINCT accepted_insurance_providers.insurance_provider_id) >= 3
问题在于加入的其他表有多个匹配项。这乘以行数并抛出然后计数。
【讨论】:
你是我的英雄!我知道必须有一个简单的解决方案。以上是关于带有两个 INNER JOINS 的 SQL 查询抛出 HAVING COUNT的主要内容,如果未能解决你的问题,请参考以下文章
sql JOINs - JOIN,INNER JOIN,LEFT JOIN,RIGHT JOIN,CROSS JOIN