Ravindra BagaleCourses & study guides Track your progress

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 वापरा.

पायऱ्या

  1. पहिलं उदाहरण run करा: WHERE grouping आधी rows काढून टाकतं.
  2. दुसरं उदाहरण run करा: HAVING मोजल्यानंतर groups काढून टाकतं.
  3. चित्र वाचा: rows, मग WHERE, मग groups, मग HAVING, मग result.
  4. लक्षात ठेवा: अशा 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_iddeposits
12
23
33
44

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_idtransactions
1034

Meaning. फक्त account 103 मध्ये 4 किंवा जास्त transactions आहेत, म्हणून HAVING ने तेवढाच group ठेवला. बाकीची सात accounts आधी मोजली गेली आणि मग काढून टाकली.

एक चित्र
  1. FROM मधले सगळे rows
  2. WHERE जुळणारे rows ठेवतं
  3. GROUP BY groups बनवतं
  4. HAVING जुळणारे groups ठेवतं
  5. 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.