आपको GROUP BY
. का उपयोग करना होगा यह समझाने के लिए कि किस समूह के आधार पर गणना की जाए। बिना GROUP BY
. के जैसा कि आपने देखा, आपको पूरे परिणाम सेट का केवल एक समूह मिलता है।
मानक SQL में GROUP BY
. में शामिल करना आवश्यक है SELECT
. में शामिल प्रत्येक गैर-समग्र व्यंजक को क्लॉज करें खंड, लेकिन MySQL आपको ऐसा न करने से दूर होने देता है, जिससे निम्न की तरह एक अभिव्यक्ति की अनुमति मिलती है। (कम से कम, जब सख्त मोड में नहीं है; मुझे यकीन नहीं है कि सख्त मोड मानक एसक्यूएल से मेल खाने के लिए इस आवश्यकता को मजबूत करता है)
SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`
मान लें कि items.id
इस तालिका की प्राथमिक कुंजी है, और इसलिए यह items
की एक से अधिक पंक्तियों में दिखाई नहीं देगी , इसका वांछित प्रभाव होना चाहिए।
एक बार जब आप GROUP BY
introduce का परिचय दे देते हैं WHERE
. के बीच के अंतर को समझना महत्वपूर्ण है और HAVING
खंड। पूर्व शर्त पहले . पर लागू होती है समूह और समुच्चय लागू होते हैं, जबकि बाद वाले बाद में applies लागू होते हैं . इसका मतलब है कि आपको HAVING
. का उपयोग करना चाहिए यदि आप उस गिनती के आधार पर एक सशर्त करना चाहते हैं; WHERE
आपके प्रारंभिक उदाहरण में क्लॉज एग्रीगेट से पहले लागू होगा, इसलिए परिणाम दी गई तारीख के बाद बनाए गए अंकों की गिनती होगी।