क्योंकि देशों में कई राज्य हो सकते हैं और प्रत्येक राज्य में कई शहर हो सकते हैं जब आप इन 1 से कई और 1 से कई में शामिल होते हैं तो आपके राज्य की संख्या बढ़ जाती है। तो आपको राज्य की विशिष्ट गणना की आवश्यकता है। शहर की संख्या पहले से ही देश और राज्य के लिए अद्वितीय है, इस प्रकार विशिष्ट की आवश्यकता नहीं है। जहां राज्य देश के शहर के लिए अद्वितीय नहीं है, इसलिए अलग की जरूरत है। यह निश्चित रूप से मानता है कि आप प्रत्येक देश में अद्वितीय राज्यों की गिनती चाहते हैं।
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
या अपने पुराने स्टाइल को जॉइन नोटेशन में रखते हुए:
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
निम्नलिखित उदाहरण पर विचार करें:http://rextester.com/ZGYF56786
या चित्र के रूप में नीचे
देखें कि देश, राज्य और शहर के बीच जुड़ाव कब होता है। शहर में शामिल होने के कारण राज्य दोहराया जाता है, उस कॉलम में राज्य को अब अद्वितीय नहीं बना रहा है, एक विशिष्ट करके हम केवल 7 के बजाय 2 राज्यों की गिनती लौटाते हैं, प्रत्येक रिकॉर्ड के लिए एक।
+-----+------------+-------------+
| 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.
+-----+------------+-------------+
मुझे लगता है कि आप पहला परिणाम चाहते हैं क्योंकि यूएसए तालिका में केवल 2 राज्य सूचीबद्ध हैं और 7 शहर हैं।