sql >> Database >  >> RDS >> Mysql

Hoe de staat en de stad van het land te tellen met behulp van een SQL-query uit de database?

Omdat landen meerdere staten kunnen hebben en elke staat meerdere steden kan hebben, wordt het aantal staten opgeblazen wanneer u zich bij deze 1 tot veel en 1 tot veel veel voegt. Dus je hebt de duidelijke telling van de staat nodig. Het aantal steden is al uniek voor land en staat en heeft dus geen onderscheid nodig. waar als staat niet uniek is voor landstad, dus onderscheiden nodig is. Dit veronderstelt natuurlijk dat je het aantal unieke staten in elk land wilt hebben.

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

Of behoud je oude stijl join-notatie:

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

Beschouw het volgende voorbeeld:http://rextester.com/ZGYF56786

of hieronder afgebeeld

Kijk wanneer de joins plaatsvinden tussen land, staat en stad. staat wordt herhaald vanwege de verbinding met stad, waardoor staat niet langer uniek is in die kolom, door een onderscheid te maken, retourneren we alleen een telling van 2 staten in plaats van 7, één voor elke record.

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

Ik zou denken dat je het eerste resultaat wilt, aangezien er slechts 2 staten in de tabel in de VS staan ​​en 7 steden.



  1. Werken met Java-gegevens in Sisense

  2. selecteer som aantal uit 2 tabellen

  3. eenvoudige willekeurige steekproeven tijdens het ophalen van gegevens uit het magazijn (oracle-engine) met behulp van proc sql in sas

  4. Is mysql count(*) veel minder efficiënt dan count(specific_field)?