Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erhalte ich die Anzahl von Bundesstaat und Stadt des Landes mithilfe einer SQL-Abfrage aus der Datenbank?

Da Länder mehrere Staaten haben können und jeder Staat mehrere Städte haben kann, wenn Sie diese 1 zu vielen und 1 zu vielen vielen verbinden, ist Ihre Anzahl an Staaten überhöht. Sie benötigen also die eindeutige Anzahl von Zuständen. Die Anzahl der Städte ist bereits eindeutig für Land und Staat und benötigt daher keine Unterscheidung. wobei ein Staat nicht nur für eine Stadt auf dem Land gilt, daher ist eine Unterscheidung erforderlich. Dies setzt natürlich voraus, dass Sie die Anzahl der eindeutigen Staaten in jedem Land wünschen.

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

Oder behalten Sie Ihre alte Join-Notation bei:

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

Betrachten Sie das folgende Beispiel:http://rextester.com/ZGYF56786

oder bildlich unten

Sehen Sie, wann die Verknüpfungen zwischen Land, Staat und Stadt stattfinden. Zustand wird wegen der Verknüpfung mit Stadt wiederholt, wodurch der Zustand in dieser Spalte nicht mehr eindeutig ist. Durch eine Unterscheidung geben wir nur eine Anzahl von 2 Staaten statt 7 zurück, einen für jeden Datensatz.

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

Ich denke, Sie möchten das erste Ergebnis, da in der USA-Tabelle nur 2 Bundesstaaten und 7 Städte aufgeführt sind.