एक SQL क्वेरी में दो COUNT मर्ज करें
Aug 29 2020
मुझे new_customers X customers_cancellations दिखाने के लिए एक क्वेरी करने की आवश्यकता है
इस क्वेरी के साथ मैं महीने तक new_customers प्राप्त कर सकता हूं:
गणना करें ग्राहक से जहां start_date शून्य नहीं है to_char (start_date, 'MM'), to_char (start_date, 'YY') द्वारा समूह आदेश द्वारा
इस अन्य के साथ, मैं ग्राहकों को महीने तक रद्द कर सकता हूं:
वर्ष के रूप में गणना (cancellation_date), to_char (cancellation_date, 'MM') को महीना नम्बर, to_char (cancellation_date, 'YY') के रूप में चुनें। ग्राहक से जहां रद्द करना_डेट करना शून्य नहीं है समूह द्वारा to आदेश द्वारा
दोनों प्रश्न कुछ इस तरह से लौटते हैं:
गिनती | माहनंबर | 1 | 1 | २० 7 | 2 | २० 5 | 3 | २०
लेकिन मुझे कुछ इस तरह चाहिए:
customer_out_count | ग्राहक_in_count | माहनंबर | 0 | 1 | 1 | २० 0 | 7 | 2 | २० 1 | 0 | 3 | २० 0 | 1 | 4 | २० 5 | 7 | 5 | २० 1 | 5 | 6 | २०
मैंने पहले ही इस अन्य प्रश्न की कोशिश की:
प्रकार के रूप में 'प्रारंभ' चुनें, गणना करें (स्टार्ट_डेट), गणना के रूप में, to_char (start_date, 'MM') महीने के रूप में, to_char (start_date, 'YY') वर्ष के रूप में ग्राहक से जहां start_date शून्य नहीं है to_char (start_date, 'MM'), to_char (start_date, 'YY') द्वारा समूह संघ प्रकार के रूप में 'रद्दीकरण' का चयन करें, गणन के रूप में गणना (रद्दीकरण_डेट), to_char (cancellation_date, 'MM') महीने के रूप में, to_char (cancellation_date, 'YY) वर्ष के रूप में ग्राहक से जहां रद्द करना_डेट करना शून्य नहीं है समूह द्वारा to आदेश द्वारा
परिणाम यह "ठीक है":
प्रकार | newcount | माहनंबर | शुरुआत | १ | 1 | २० रद्द करना | 1 | 1 | २० रद्दीकरण | 7 | 2 | २० शुरू | 3 | 3 | २० रद्द करना | 1 | 4 | २० शुरुआत | 7 | 5 | २० शुरू | 5 | 6 | २०
लेकिन मुझे जो चाहिए उसे हासिल करने के लिए कोड पर कुछ ऑपरेशन करने होंगे।
मैं इस दो प्रश्नों को एक में कैसे मिला सकता हूं? मैं postgreslq का उपयोग कर रहा हूं।
जवाब
1 GMB Aug 29 2020 at 06:30
एक विकल्प पंक्तियों को unpivots करता है, फिर एग्रीगेट करता है। पोस्टग्रेज में, आप इसे पार्श्व जोड़ के साथ व्यक्त करेंगे:
select
sum(x.customer_in_count) as customer_in_count,
sum(x.customer_out_count) as customer_out_count
to_char(x.dt, 'MM') as monthNumber,
to_char(x.dt, 'YY') as yearNumber
from customer c
cross join lateral (values
(c.start_date, 1, 0), (c.cancellation_date, 0, 1)
) as x(dt, customer_in_count, customer_out_count)
where x.dt is not null
group by monthNumber, yearNumber
order by monthNumber, yearNumber