sql >> Databáze >  >> RDS >> Mysql

Jak získat počet státu a města země pomocí SQL dotazu z databáze?

Protože země mohou mít více států a každý stát může mít více měst, když se připojíte k těmto 1 k mnoha a 1 k mnoha mnoha, váš počet států je nafouknutý. Takže potřebujete zřetelný počet státu. Počet měst je již jedinečný pro zemi a stát, takže nepotřebuje rozlišovací znak. kde jako stát není jedinečný pro venkovské město, je tedy potřeba rozlišovat. To samozřejmě předpokládá, že chcete počet jedinečných států v každé zemi.

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

Nebo si ponechte svůj starý způsob zápisu spojení:

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

Zvažte následující příklad:http://rextester.com/ZGYF56786

nebo obrázkově níže

Podívejte se, kdy dojde ke spojení mezi zemí, státem a městem. stav se opakuje kvůli připojení k městu, takže stav již není v tomto sloupci jedinečný. Provedením rozlišování vrátíme pouze počet 2 stavů místo 7, jeden pro každý záznam.

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

Myslím, že chcete 1. výsledek, protože v tabulce USA jsou uvedeny pouze 2 státy a 7 měst.



  1. SQLAlchemy (psycopg2.ProgrammingError) nemůže přizpůsobit typ 'dict'

  2. Příjem emailů, jejich zpracování a ukládání do databáze mé webové aplikace

  3. Čas a datum razítko v řádku tabulky MySQL

  4. Rozdíly mezi MySQL a SQL Serverem