Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere il conteggio dello stato e della città del paese utilizzando la query SQL dal database?

Poiché i paesi possono avere più stati e ogni stato può avere più città quando ti unisci a questi da 1 a molti e da 1 a molti molti, il conteggio degli stati viene gonfiato. Quindi hai bisogno del distinto conteggio di stato. Il conteggio delle città è già unico per paese e stato, quindi non ha bisogno del distinto. dove poiché lo stato non è unico per la città di campagna, è necessario quindi distinto. Questo ovviamente presuppone che tu voglia il conteggio degli stati unici in ogni paese.

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

O mantenendo la notazione di join vecchio stile:

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

Considera il seguente esempio:http://rextester.com/ZGYF56786

o pittoricamente sotto

Guarda quando si verificano i join tra paese, stato e città. lo stato viene ripetuto a causa dell'unione alla città, rendendo lo stato non più unico in quella colonna, facendo una distinta restituiamo solo un conteggio di 2 stati invece di 7, uno per ogni record.

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

Penso che tu voglia il primo risultato poiché ci sono solo 2 stati nella tabella USA elencata e 7 città.