Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać liczbę stanu i miasta kraju za pomocą zapytania SQL z bazy danych?

Ponieważ kraje mogą mieć wiele stanów, a każdy stan może mieć wiele miast, gdy dołączysz do tych od 1 do wielu i od 1 do wielu, liczba stanów jest zawyżona. Potrzebujesz więc odrębnej liczby stanów. Liczba miast jest już unikalna dla kraju i stanu, dlatego nie jest potrzebna odrębność. gdzie jako państwo nie jest unikalne dla miasta wiejskiego, dlatego potrzebne jest odrębne. To oczywiście zakłada, że ​​chcesz mieć liczbę unikalnych stanów w każdym kraju.

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

Lub zachowując notację sprzężenia w starym stylu:

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

Rozważmy następujący przykład:http://rextester.com/ZGYF56786

lub obrazowo poniżej

Zobacz, kiedy występują połączenia między krajem, stanem i miastem. stan jest powtarzany z powodu przyłączenia do miasta, przez co stan nie jest już unikalny w tej kolumnie, wykonując odrębne zwracamy tylko liczbę 2 stanów zamiast 7, po jednym dla każdego rekordu.

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

Myślę, że chcesz pierwszego wyniku, ponieważ w tabeli USA są tylko 2 stany i 7 miast.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sequelize odczytuje datę i godzinę tylko w UTC

  2. php mysql - czy powinienem dodać pole nazwa-kategorii do tabeli, czy nie?

  3. MySQL czy moje indeksy są dobre?

  4. Zagnieżdżone MySQL Wybierz

  5. MySQL:uporządkuj według wewnątrz grupy według