13. HAVING: Aggregate नंतर groups filter करा
13.3 WHERE (row filter) आणि HAVING (group filter) एकत्र कसे वापरायचे
का (Why). खऱ्या प्रश्नांमध्ये बऱ्याचदा दोन्ही filters लागतात, जसं फक्त deposits, आणि त्यातही पुरेसे deposits असलेल्या branches.
काय (What). Row ची condition WHERE मध्ये आणि group ची condition HAVING मध्ये ठेवा. WHERE आधी चालतं, म्हणून HAVING ला फक्त WHERE ने ठेवलेल्या rows पासून बनलेले totals दिसतात.
कसं (How). WHERE ने प्रत्येक branch चे deposits मोजा, आणि मग HAVING वापरून किमान 3 deposits असलेल्या branches ठेवा.
पायऱ्या
- पहिलं उदाहरण run करा, त्यात WHERE आणि HAVING दोन्ही आहेत.
- दुसरं उदाहरण run करा, त्यात फक्त HAVING आहे, आणि counts ची तुलना करा.
- Counts बदलतात हे बघा, कारण दुसरी query सगळ्या प्रकारचे transactions मोजते.
- निवड करण्याआधी manager ने नेमका कुठला प्रश्न विचारला ते ठरवा.
उदाहरणे
उदाहरण 1 · dataset: northstar_bank
SELECT branch_id, COUNT(*) AS deposits
FROM transactions
WHERE txn_type = 'deposit'
GROUP BY branch_id
HAVING COUNT(*) >= 3
ORDER BY branch_id;Output
| branch_id | deposits |
|---|---|
| 2 | 3 |
| 3 | 3 |
| 4 | 4 |
Meaning. फक्त 3 किंवा जास्त deposits असलेल्या branches दिसतात. कमी deposits असलेल्या branches HAVING ने काढून टाकल्या.
उदाहरण 2 · dataset: northstar_bank
SELECT branch_id, COUNT(*) AS all_transactions
FROM transactions
GROUP BY branch_id
HAVING COUNT(*) >= 3
ORDER BY branch_id;Output
| branch_id | all_transactions |
|---|---|
| 1 | 6 |
| 2 | 7 |
| 3 | 6 |
| 4 | 6 |
Meaning. WHERE शिवाय प्रत्येक branch पास होते, कारण cheques आणि withdrawals पण मोजले जातात. हे वेगळ्याच प्रश्नाचं उत्तर आहे.
Ravindra Bagale's Tip
In a grouped query, if a condition checks single rows and does not use SUM, COUNT, AVG, MIN or MAX, put it in WHERE. The query is clearer and does less work.
Ravindra Bagale's Tip – मराठी
Grouped query मध्ये condition एकेका row ला तपासत असेल आणि त्यात SUM, COUNT, AVG, MIN किंवा MAX नसेल, तर ती WHERE मध्ये ठेवा. Query स्पष्ट होते आणि कमी काम करते.
Ravindra Bagale's Tip – हिंदी
Condition में SUM, COUNT, AVG, MIN या MAX न हो, तो उसे WHERE में रखिए। Query साफ़ होती है और कम काम करती है।