Database
 sql >> डेटाबेस >  >> RDS >> Database

टी-एसक्यूएल में साल दर साल ग्रुप कैसे करें

समस्या:

आप अपने डेटा को वर्ष के अनुसार समूहित करना चाहते हैं।

उदाहरण 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 . का उपयोग नहीं करते हैं खंड।

आप यहां विंडो फ़ंक्शन के बारे में अधिक पढ़ सकते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में एक वर्गमूल की गणना कैसे करें

  2. SQL में दो तालिकाओं से पंक्तियों के सभी संभावित संयोजन कैसे प्राप्त करें

  3. निकटतम मैच, भाग 2

  4. समानांतर निष्पादन योजनाएँ - शाखाएँ और सूत्र

  5. एक मैराथन प्रशिक्षण ऐप डेटा मॉडल