sql >> Databasteknik >  >> RDS >> Mysql

Hur får man räkning av stat och stad i landet med hjälp av SQL-fråga från databasen?

Eftersom länder kan ha flera stater och varje stat kan ha flera städer när du går med i dessa 1 till många och 1 till många många är ditt delstatsantal uppblåst. Så du behöver den distinkta räkningen av staten. Stadsräkningen är redan unik för land och stat, och behöver därför inte den distinkta. där staten inte är unik för landet stad, så distinkt behövs. Detta förutsätter naturligtvis att du vill ha antalet unika stater i varje land.

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

Eller behåll din gamla anslutningsnotation:

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

Tänk på följande exempel:http://rextester.com/ZGYF56786

eller bildmässigt nedan

Se när kopplingarna sker mellan land, stat och stad. staten upprepas på grund av kopplingen till staden, vilket gör att staten inte längre är unik i den kolumnen, genom att göra en distinkt returnerar vi bara ett antal av 2 stater istället för 7, en för varje post.

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

Jag skulle tro att du vill ha det första resultatet eftersom det bara finns 2 delstater i USA-tabellen och 7 städer.



  1. SubSonic genererar inte MySql främmande nyckeltabeller

  2. Distribuera en Java-app med databasen mysql desktop

  3. SQL-fråga för att matcha säljare och köpare

  4. Hämta pl/sql-arrayreturvärden i java