具有两个内部联接的SQL查询将抛出计数
我正在rails应用程序中设置一个查询,只查看至少有3家认可保险提供商的care_提供商 上面的问题是查询应该如何工作。它只返回“提供者1”,因为其他提供者只有不到3个可接受的保险提供者 当然,我还需要对查询设置许多其他条件,这些条件需要与其他表进行内部联接。一旦我添加了一个额外的内部连接,我的计数就会被抛出,我会让提供者通过我的havingcount标准,而这是不应该的 你可以从这把小提琴上看到“提供者1”现在显示的是6,而“提供者2”显示的是4具有两个内部联接的SQL查询将抛出计数,sql,ruby-on-rails,Sql,Ruby On Rails,我正在rails应用程序中设置一个查询,只查看至少有3家认可保险提供商的care_提供商 上面的问题是查询应该如何工作。它只返回“提供者1”,因为其他提供者只有不到3个可接受的保险提供者 当然,我还需要对查询设置许多其他条件,这些条件需要与其他表进行内部联接。一旦我添加了一个额外的内部连接,我的计数就会被抛出,我会让提供者通过我的havingcount标准,而这是不应该的 你可以从这把小提琴上看到“提供者1”现在显示的是6,而“提供者2”显示的是4 你有没有想过我该如何构造这个来获得我需要的
你有没有想过我该如何构造这个来获得我需要的计数?另外,如果有一种简单的方法可以在ActiveRecord中将其作为作用域处理,我将接受一个SQL回答。解决这个问题的快捷方法可能是使用
count(distinct)
:
问题是要加入的其他表有多个匹配项。这会将行数相乘,然后抛出count 你是我的英雄!我知道必须有一个简单的解决办法。
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
;
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
;
HAVING COUNT(DISTINCT accepted_insurance_providers.insurance_provider_id) >= 3