Ravindra BagaleCourses & study guides Track your progress

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 ठेवा.

पायऱ्या

  1. पहिलं उदाहरण run करा, त्यात WHERE आणि HAVING दोन्ही आहेत.
  2. दुसरं उदाहरण run करा, त्यात फक्त HAVING आहे, आणि counts ची तुलना करा.
  3. Counts बदलतात हे बघा, कारण दुसरी query सगळ्या प्रकारचे transactions मोजते.
  4. निवड करण्याआधी 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_iddeposits
23
33
44

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_idall_transactions
16
27
36
46

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.