2012-01-17 3 views
2

저는 SQL을 처음 사용합니다. 현재 복잡한 쿼리를 작성하는 법을 배우고 있습니다.관련 SQL 쿼리

세 개의 테이블이 있습니다. Country-- 국가의 목록이

-----------+------------- 
CountryId | CountryName 
-----------+------------- 
     1 | India 
     2 | Srilanka 
     3 | Pakistan 
     4 | Bangladesh 
     5 | Nepal 
     6 | America 
     7 | Japan 
     8 | China 
     9 | Russia 
     10 | Canada 
     11 | Australia 
--------------------------------------- 

도시 - 국가의 도시 목록

--------+-------------+----------- 
CityId | CityName | CountryId 
--------+-------------+----------- 
     1 | Chennai  |   1 
     2 | Washington |   6 
     3 | Moscow  |   9 
     4 | Tokyo  |   7 
     5 | Beijing  |   8 
     6 | Sydney  |  11 
     7 | Bangalore |   1 
     8 | Nagercoil |   1 
     9 | AmericaCity |   6 
    10 | Kathmandu |   5 
    11 | Dhaka  |   4 
    12 | Lahore  |   3 
-------------------------------------- 

공항 -

AirportId | AirportName | CityId 
-----------+-------------+-------- 
     1 | Airport1 |  1 
     2 | Airport2 |  4 
     3 | Airport3 |  5 
     4 | Airport4 |  1 
     5 | Airport5 |  6 
     6 | Airport6 |  3 
     7 | Airport7 |  5 
     8 | Airport8 |  7 
     9 | Airport9 |  6 
     10 | Airport10 |  3 
     11 | Airport11 |  11 
     12 | Airport12 |  10 
     13 | Airport13 |  12 
--------------------------------- 

이 질문 도시의 공항 목록 : 나는 검색 할 공항 수가 많은 모든 국가 (예 :

)
Output: 
countryName Airports 
India   3 
Srilanka   0 
......... etc. 
이 유용 할 것이다
+0

이, 숙제를하지입니까? – dasblinkenlight

답변

0

보십시오 : 그것은

SELECT 
    Country.CountryId, 
    Country.CountryName, 
    count(AirportID) AS Airports 
FROM 
    Country 
    LEFT JOIN city ON Country.CountryId=city.CountryId 
    LEFT JOIN Airport ON city.CityId=Airport.CityId 
GROUP BY Country.CountryId 
+0

. 이 하나가 완벽하게 작동합니다 .... 당신의 모든 지원에 감사드립니다. – user1153769

1
select 
    c.CountryName, 
    SUM(
    select count(*) from Airport a 
    inner join City city on city.CityId = a.CityId 
    where city.CountryId = c.CountryId 
    ) as Airports 
from 
    Country c 
+0

이것은 MyISAM/Linux에서 실행되지 않습니다. 테이블 이름은 대소 문자를 구별합니다. –

+0

OP가 시작 부분에 대문자가있는 모든 테이블 (예 : 국가, 공항)을 생성했는지 그리고 이동을 잊어 버렸는지 모르겠습니다. 도시의 핵심이지만, "countryName"과 관련해서는 완전히 옳습니다. – Matten

+0

이것은 당신을 비난하지 않았다. 단지 힌트 - 만약 당신이 당신의 대답을 고치면, 나는 대답 –

0
SELECT 
    Country.CountryName, 
    count(*) AS Airports 
FROM 
    Country 
    INNER JOIN city ON Country.CountryId=city.CountryId 
    INNER JOIN Airport ON city.CityId=Airport.CityId 
GROUP BY Country.CountryId 
2
SELECT a.AirportName, co.CountryName, COUNT(co.name) AS count 
FROM Airports as a 
LEFT JOIN City as c ON a.CityId = c.CityId 
LEFT JOIN Country as co ON c.CountryId = co.CountryId 
GROUP BY co.CountryId 
+1

을 삭제할 것이다. 다른 대답은 공항이있는 도시가없는 나라들을 다루지 않는다. 이것은 하나; 공항이없는 국가의 경우 0을 반환합니다. – xQbert

+0

@xQbert : 아니오 - 현재 ** 공항에서 도시로 연결되어 있으므로 도시 나 국가가있는 공항을 검색합니다. 왼쪽 조인을 오른쪽 조인으로 변경하면 문제가 해결되지만 카운트는 국가 이름이 아닌 공항 이름이어야합니다. Thanks Mark. –

1
SELECT CountryName, COUNT(CountryName) AS Airports 

FROM Airports INNER JOIN City ON Airports.CityId = City.CityId 
       INNER JOIN Country ON City.CountryId = Country.CountryId 

GROUP BY CountryId 

희망 당신