SQL-запрос относительно - PullRequest
2 голосов
/ 17 января 2012

Я новичок в SQL.В настоящее время я учусь писать сложные запросы.

У меня есть три таблицы.Страна-- есть список стран

-----------+-------------
 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.

Ответы [ 5 ]

2 голосов
/ 17 января 2012
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 голос
/ 17 января 2012
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

Надеюсь, это будет полезно для вас

1 голос
/ 17 января 2012
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 голосов
/ 17 января 2012

Попробуйте:

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 голосов
/ 17 января 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...