13. HAVING: Aggregate नंतर groups filter करा
13.1 WHERE vs HAVING एका चित्रात
का (Why). WHERE आणि HAVING दोन्ही filter करतात, म्हणून नवीन शिकणारे गोंधळतात. कुठलं कधी चालतं हे माहीत असलं की totals बरोबर राहतात.
काय (What). SQLite query या क्रमाने वाचतं: FROM, मग एकेका row वर WHERE, मग GROUP BY, मग पूर्ण groups वर HAVING. WHERE मध्ये SUM किंवा COUNT वापरता येत नाही, कारण तेव्हा groups तयारच झालेले नसतात. HAVING मध्ये वापरता येतं, कारण ते totals तयार झाल्यावर चालतं.
कसं (How). फक्त deposits ठेवायला WHERE वापरा, आणि किमान 4 transactions असलेली accounts ठेवायला HAVING वापरा.
पायऱ्या
- पहिलं उदाहरण run करा: WHERE grouping आधी rows काढून टाकतं.
- दुसरं उदाहरण run करा: HAVING मोजल्यानंतर groups काढून टाकतं.
- चित्र वाचा: rows, मग WHERE, मग groups, मग HAVING, मग result.
- लक्षात ठेवा: अशा grouped query मध्ये group च्या SUM किंवा COUNT वरची condition HAVING मध्ये जाते, आणि एकेका row वरची condition WHERE मध्ये जाते.
उदाहरणे
उदाहरण 1 · dataset: northstar_bank
SELECT branch_id, COUNT(*) AS deposits
FROM transactions
WHERE txn_type = 'deposit'
GROUP BY branch_id
ORDER BY branch_id;Output
| branch_id | deposits |
|---|---|
| 1 | 2 |
| 2 | 3 |
| 3 | 3 |
| 4 | 4 |
Meaning. WHERE ने फक्त deposit rows ठेवले, आणि मग GROUP BY ने प्रत्येक branch साठी ते मोजले.
उदाहरण 2 · dataset: northstar_bank
SELECT account_id, COUNT(*) AS transactions
FROM transactions
GROUP BY account_id
HAVING COUNT(*) >= 4
ORDER BY account_id;Output
| account_id | transactions |
|---|---|
| 103 | 4 |
Meaning. फक्त account 103 मध्ये 4 किंवा जास्त transactions आहेत, म्हणून HAVING ने तेवढाच group ठेवला. बाकीची सात accounts आधी मोजली गेली आणि मग काढून टाकली.
- FROM मधले सगळे rows
- WHERE जुळणारे rows ठेवतं
- GROUP BY groups बनवतं
- HAVING जुळणारे groups ठेवतं
- SELECT result दाखवतं
Ravindra Bagale's Tip
If you write WHERE SUM(amount) > 1000, SQLite gives an error about misuse of an aggregate. That error means: move this condition to HAVING.
Ravindra Bagale's Tip – मराठी
WHERE SUM(amount) > 1000 लिहिलं तर SQLite aggregate च्या चुकीच्या वापराचा error देतं. त्या error चा अर्थ: ही condition HAVING मध्ये हलवा.
Ravindra Bagale's Tip – हिंदी
WHERE SUM(amount) > 1000 लिखेंगे तो SQLite aggregate के गलत इस्तेमाल का error देगा। उस error का मतलब है: यह condition HAVING में ले जाइए।