sql >> データベース >  >> RDS >> Mysql

データベースからSQLクエリを使用して州と国の都市の数を取得するにはどうすればよいですか?

    国は複数の州を持つことができ、これらの1対多および1対多に参加すると、各州は複数の都市を持つことができるため、州の数は膨らみます。したがって、状態の明確なカウントが必要です。都市数はすでに国と州に固有であるため、区別する必要はありません。州は国の都市に固有ではないため、明確にする必要があります。もちろん、これは各国の固有の州の数が必要であることを前提としています。

    SELECT c.name, count(distinct s.name) as statecount,  count(Ci.name) as CityCount
    FROM countries c
    INNER JOIN states s 
      on c.id = s.country_ID
    INNER JOIN cities ci
      ON s.id = ci.state_id
    GROUP BY C.name
    

    または、古いスタイルの結合表記を維持する:

    SELECT c.name, count(distinct s.name) as statecount,  count(ci.name) citycount 
    FROM countries c,states s,cities ci
    WHERE ci.state_id = s.id 
      and s.country_id = c.id 
    GROUP BY s.name
    

    次の例を考えてみましょう。 http://rextester.com/ZGYF56786

    または下の絵

    国、州、都市の間でいつ結合が発生するかを確認します。都市への参加により州が繰り返され、その列で州が一意でなくなります。個別に行うことで、レコードごとに1つずつ、7ではなく2つの州のカウントのみが返されます。

    +-----+------------+-------------+
    | USA | Illinois   | Chicago     |
    | USA | Illinois   | Springfield |
    | USA | Illinois   | Peoria      |
    | USA | California | LosAngeles  |
    | USA | California | Sacramento  |
    | USA | California | SanDeigo    |
    | USA | California | Hollywood   |
    | USA | California | Oakland     |
    |-----|------------|-------------|
    |Name | statecount | Citycount   |
    | USA | 2          | 7           | <-- Is this result correct? (i hope so)
    | USA | 7          | 7           | <-- or this one? (then why bother just count(*) and only 1 count needed.
    +-----+------------+-------------+
    

    リストされている米国の表には2つの州と7つの都市しかないため、最初の結果が必要だと思います。



    1. シングルトンを介したnode.jsmySQL接続

    2. Ubuntuでmysqlサーバーを起動できません

    3. 結合されたセットにすべての値が含まれている必要がありますが、それ以上の値が含まれている可能性があるSQL

    4. 親JPAからすべての子とサブ子を取得する