-1

私はすでにSQLフィドルにスキーマとサンプルデータを提供しています。

http://sqlfiddle.com/#!2/e9d22/7/0

タイの州と都市の数を知りたい場合。

Country Name | No. Provinces | No. Cities
  Thailand   |   77          |  1234

複数のCOUNT(*)を使用する必要があると思いますが、使用方法がわかりません。

誰かが解決策を提案してくださいを知っていますか?

4

3 に答える 3

1

これを試して:

SELECT
    C.Name, COUNT(DISTINCT P.Id) NoProvance, COUNT(CC.Id) NoCities
FROM country C
    JOIN province P
        ON C.Id = P.COUNTRY_ID
    JOIN city CC
        ON P.Id = CC.province_id
WHERE C.Name = 'Thailand'
GROUP BY C.Name

SQL フィドルのデモ

于 2013-02-06T17:58:10.093 に答える
1

とを使用する必要がありGROUP BYますCOUNT

SELECT c.name, count(distinct p.id) provincecoutn, count(distinct city.id) citycount
FROM country c
  LEFT JOIN province p on c.id = p.country_id
  LEFT JOIN City on p.id = city.province_id
GROUP BY c.name

幸運を。

于 2013-02-06T17:57:07.837 に答える
0

プロヴィンスに参加する前に、プロヴィンスごとに都市を数えた方がおそらく速いでしょう:

SELECT c.name          AS "Country Name"
      ,count(p.id)     AS "No. Provinces"
      ,sum(ci.city_ct) AS "No. Cities" 
FROM   country       c
LEFT   JOIN province p ON p.country_id = c.id
LEFT   JOIN (
   SELECT province_id, count(*) AS city_ct FROM city GROUP BY 1
   ) ci ON ci.province_id = p.id
GROUP  BY 1

-> PostgreSQL 用の sqlfiddle(!)

于 2013-02-06T18:43:02.557 に答える