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

Hvordan får man optælling af stat og by i landet ved hjælp af SQL-forespørgsel fra databasen?

Fordi lande kan have flere stater, og hver stat kan have flere byer, når du slutter dig til disse 1 til mange og 1 til mange mange, er dit statstal oppustet. Så du har brug for den særskilte optælling af staten. Bytællingen er allerede unik for land og stat, og har derfor ikke brug for det særskilte. hvor da staten ikke er unik for landbyen, er der derfor behov for særskilt. Dette forudsætter naturligvis, at du vil have antallet af unikke stater i hvert land.

SELECT c.name, count(distinct s.name) as statecount, count(Ci.name) as CityCountFROM country cINNER JOIN stater s på c.id =s.country_IDINNER JOIN byer ci ON s.id =ci.state_idGROUP BY C.name 

Eller behold din gamle stil join-notation:

VÆLG c.name, count(distinct s.name) as statecount, count(ci.name) citycount FROM lande c,stater s,byer ciWHERE ci.state_id =s.id og s.country_id =c .id GROUP BY s.name 

Overvej følgende eksempel:http://rextester.com/ZGYF56786

eller billedmæssigt nedenfor

Se, hvornår sammenføjningerne sker mellem land, stat og by. tilstand bliver gentaget på grund af sammenføjningen til by, hvilket gør staten ikke længere unik i den kolonne, ved at gøre en distinkt returnerer vi kun et antal på 2 stater i stedet for 7, en for hver post.

+-----+------------+-------------+| USA | Illinois | Chicago || USA | Illinois | Springfield || USA | Illinois | Peoria || USA | Californien | LosAngeles || USA | Californien | Sacramento || USA | Californien | SanDeigo || USA | Californien | Hollywood || USA | Californien | Oakland ||-----|------------|------------------||Navn | statantal | Bytælling || USA | 2 | 7 | <-- Er dette resultat korrekt? (det håber jeg)| USA | 7 | 7 | <-- eller denne? (hvorfor så gider bare tælle(*) og kun 1 optælling er nødvendig.+-----+------------+-------+

Jeg vil tro, du vil have det 1. resultat, da der kun er 2 stater i USA-tabellen og 7 byer.



  1. MySQL-opdateringstabel baseret på en anden tabelværdi

  2. SQL-operatører

  3. Beregn åbningstider mellem to datoer

  4. Codeiginter mysql gemmer kinesiske tegn som spørgsmålstegn