2014-10-05 118 views
0

我有如下表:SUM(COUNT(),在SQL查询)

PersonID(PK) 
AppartmentID(FK) 
Name 

Appartments酒店

AppartmentID(PK) 
BuildingID(FK) 
ApartmentNumber 

建筑

BuildingID 
Address 

我试图让多少人住在每幢建筑,这样的事情:

| Address | Sum | 
|----------|-----| 
| Address1 | 169 | 
| Address2 | 353 | 
| Address3 | 232 | 
| Address4 | 199 | 

我迄今为止最好的查询是:

SELECT 
    Buildings.BuildingID, 
    sum(c) 
FROM 
    (SELECT 
     COUNT(*) as c 
    FROM 
     Persons 
    GROUP BY 
     Persons.AppartmentID) as c, Appartments 
GROUP BY 
    Buildings.BuildingID; 

但它无法正常工作如我所料。

任何帮助将不胜感激。

回答

1
SELECT b.BuildingID, 
     b.Address, 
     count(p.personID) as persons 
FROM Buildings b 
LEFT JOIN Appartments a ON a.BuildingID = b.BuildingID 
INNER JOIN Persons p ON p.AppartmentID = a.AppartmentID 
GROUP BY b.BuildingID, b.Address 
+0

太棒了!但是,如果我想要显示地址,即使没有与之关联的子记录,该怎么办? – koryakinp 2014-10-05 11:22:57

+0

明白了!我需要使用LEFT OUTER JOIN。 – koryakinp 2014-10-05 11:32:42