समस्या:
आप अपने डेटा को वर्ष के अनुसार समूहित करना चाहते हैं।
उदाहरण I:
आपके डेटा में एक कॉलम है transaction_date
. इसमें एक तारीख होती है। आप अपने सभी डेटा को वर्ष के अनुसार समूहित करना चाहते हैं और प्रत्येक वर्ष अर्जित कुल धन की गणना करना चाहते हैं।
data
तालिका इस तरह दिखती है:
लेनदेन_तिथि | पैसा |
---|---|
2018-03-25 | 1700 |
2019-09-12 | 100 |
2018-07-14 | 1200 |
2018-01-05 | 400 |
2019-06-08 | 2000 |
2020-03-06 | 1500 |
समाधान 1 (वर्ष और अर्जित धन को प्रदर्शित करना):
SELECT YEAR(transaction_date) AS year, SUM(money) AS money_earned FROM data GROUP BY YEAR(transaction_date);
नतीजा यह है:
वर्ष | पैसा_अर्जित |
---|---|
2020 | 1500 |
2019 | 2100 |
2018 | 3300 |
समाधान 2 (पूर्ण तिथि, वर्ष और संबंधित वर्ष में अर्जित धन को प्रदर्शित करना):
SELECT transaction_date AS transaction_date, YEAR(transaction_date) AS year, SUM(money) OVER(PARTITION BY YEAR(transaction_date)) AS money_earned FROM data;
नतीजा यह है:
लेनदेन_तिथि | वर्ष | पैसा_अर्जित |
---|---|---|
2018-03-25 | 2018 | 3300 |
2018-07-14 | 2018 | 3300 |
2018-01-05 | 2018 | 3300 |
2019-09-12 | 2019 | 2100 |
2019-06-08 | 2019 | 2100 |
2020-03-06 | 2020 | 1500 |
चर्चा:
इस उदाहरण में यह माना जाता है कि आपके पास वर्ष कॉलम नहीं है। आपके पास पूर्ण तिथियों वाला कॉलम है और आप इससे वर्ष प्राप्त करना चाहेंगे।
SQL सर्वर में दिनांक से एक वर्ष प्राप्त करने के लिए, आप YEAR()
. का उपयोग कर सकते हैं समारोह। इस फ़ंक्शन का तर्क दिनांक होना चाहिए - यहाँ, transaction_date
कॉलम।
यदि आप वर्ष और इस वर्ष अर्जित कुल धन प्रदर्शित करना चाहते हैं, तो आप GROUP BY
का उपयोग कर सकते हैं . पहला चयनित कॉलम दिनांक से निकाला गया वर्ष है। दूसरा कॉलम कुल कार्य है SUM(money)
. क्वेरी के अंत में आपको GROUP BY
. की आवश्यकता होगी YEAR(transaction_date)
. इसलिए समाधान 1.
यदि आप अधिक कॉलम प्रदर्शित करना चाहते हैं, तो आप एक विंडो फ़ंक्शन (समाधान 2) का उपयोग करते हैं। SUM(money)
. के बाद आप OVER()
लिखें खंड और, चूंकि आप प्रत्येक वर्ष के अनुसार समूह बनाना चाहते हैं, PARTITION BY YEAR(transaction_date)
का उपयोग करें इसके अंदर। ध्यान दें कि आपके पास अभी तक year
नहीं है योग की गणना करते समय कॉलम, इसलिए PARTITION BY
साल काम नहीं करेगा। आप यहां विंडो फ़ंक्शन के बारे में अधिक पढ़ सकते हैं।
उदाहरण II:
आपके डेटा में एक कॉलम है year
. आप अपने सभी डेटा को इस कॉलम के आधार पर समूहित करना चाहते हैं और प्रत्येक वर्ष अर्जित कुल धन की गणना करना चाहते हैं।
data
तालिका इस तरह दिखती है:
वर्ष | माह | <थ>दिनपैसा | |
---|---|---|---|
2018 | 3 | 25 | 1700 |
2019 | 9 | 12 | 100 |
2018 | 7 | 14 | 1200 |
2018 | 1 | 5 | 400 |
2019 | 6 | 8 | 2000 |
2020 | 3 | 6 | 1500 |
समाधान 1 (वर्ष और अर्जित धन को प्रदर्शित करना):
SELECT year, SUM(money) AS money_earned FROM data GROUP BY year;
नतीजा यह है:
वर्ष | पैसा_अर्जित |
---|---|
2020 | 1500 |
2018 | 3300 |
2019 | 2100 |
समाधान 2 (वर्ष, माह, दिन और संबंधित वर्ष में अर्जित धन को प्रदर्शित करना):
SELECT year, month, day, SUM(money) OVER(PARTITION BY year) AS money_earned FROM data;
नतीजा यह है:
वर्ष | माह | <थ>दिनपैसा_अर्जित | |
---|---|---|---|
2018 | 3 | 25 | 3300 |
2018 | 7 | 14 | 3300 |
2018 | 1 | 5 | 3300 |
2019 | 9 | 12 | 2100 |
2019 | 6 | 8 | 2100 |
2020 | 3 | 6 | 1500 |
चर्चा
इस उदाहरण में यह माना जाता है कि आपके पास पहले से ही year
है कॉलम।
यदि आप केवल वर्ष और इस वर्ष अर्जित कुल धन प्रदर्शित करना चाहते हैं, तो एक आसान GROUP BY
काफी है। यदि आप ग्रुप बाय की अवधारणा के साथ सहज महसूस नहीं करते हैं, तो यहां एक नज़र डालें जहां हम इसे समझाते हैं। आप केवल समग्र फ़ंक्शन का उपयोग करते हैं (यहां:SUM
) सही कॉलम के साथ और क्वेरी के अंत में आप year
. द्वारा समूहित करते हैं . आप AS
. का उपयोग करके कॉलम का नाम बदल सकते हैं एक नए नाम के साथ कीवर्ड। साथ ही, यदि आप डेटा को वर्ष के अनुसार क्रमबद्ध करना चाहते हैं, तो ORDER BY
. का उपयोग करें आपकी क्वेरी के अंत में वर्ष।
यदि आप कुछ अन्य कॉलम भी प्रदर्शित करना चाहते हैं तो यह अधिक जटिल है। फिर आपको विंडो फ़ंक्शन (समाधान 2) का उपयोग करके समाधान की आवश्यकता है। आपको उपयुक्त कॉलम के साथ एग्रीगेट फ़ंक्शन का उपयोग करना चाहिए (SUM(money)
) और OVER()
लिखें बाद में खंड। इस क्लॉज में, आपको PARTITION BY
. का उपयोग करना चाहिए उस कॉलम के साथ जिसके द्वारा आप समूह बनाना चाहते हैं। इस तरह आपको मिलता है:
SUM(money) OVER(PARTITION BY year)
इस समाधान में, आप GROUP BY
. का उपयोग नहीं करते हैं खंड।
आप यहां विंडो फ़ंक्शन के बारे में अधिक पढ़ सकते हैं।