2014-10-05 5 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

Отлично! Но что, если я хочу отображать адрес, даже если нет связанных с ним записей Child? – koryakinp

+0

Получил! Мне нужно использовать LEFT OUTER JOIN. – koryakinp