我有三张桌子:
我想知道我的数据库中有多少公司拥有超过100个地址的帐户。
我尝试了这个,但它不起作用:
SELECT
COUNT(DISTINCT c.Id)
FROM
Customers cu
INNER JOIN
Addresses ad ON ad.Customer = cu.Id
INNER JOIN
Companies c ON cu.company = c.Id
GROUP BY
cu.ID
HAVING
COUNT(ad.ID) > 100
答案 0 :(得分:3)
此查询需要两个级别的聚合。这是一种方法:
SELECT COUNT(*)
FROM (SELECT cu.company, COUNT(DISTINCT ad.id) as num_accresses
FROM Customers cu
INNER JOIN Addresses ad ON ad.Customer = cu.Id
GROUP BY cu.company
HAVING COUNT(DISTINCT ad.id) > 100
) cua;
内部查询返回具有超过100个地址的公司。请注意COUNT(DISTINCT)
的使用。据推测,有两个"客户"可以有相同的地址。
此外,不需要公司表。识别信息在customers
中。你只是在寻找一个计数,所以这个表是没有必要的。