Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter a contagem do estado e da cidade do país usando a consulta SQL do banco de dados?


Como os países podem ter vários estados e cada estado pode ter várias cidades quando você junta esses 1 para muitos e 1 para muitos, sua contagem de estados é inflada. Então você precisa da contagem distinta de estado. A contagem de cidades já é exclusiva para país e estado, portanto, não precisa do distinto. onde, como o estado não é exclusivo da cidade do país, é necessário distinguir. Obviamente, isso pressupõe que você deseja a contagem de estados exclusivos em cada país.
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

Ou mantendo sua notação de junção de estilo antigo:
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

Considere o seguinte exemplo:http://rextester.com/ZGYF56786

ou pictoricamente abaixo

Veja quando ocorrem as junções entre país, estado e cidade. state se repete por causa do join to city, tornando state não mais único nessa coluna, fazendo um distinct só retornamos uma contagem de 2 estados ao invés de 7, um para cada registro.
+-----+------------+-------------+
| 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.
+-----+------------+-------------+

Eu acho que você quer o 1º resultado, já que existem apenas 2 estados na tabela dos EUA listados e 7 cidades.