एक ही क्वेरी में कई aggregations को संयोजित करें
पिछले तीन अभ्यासों में, हमने ROLLUP, CUBE, और GROUPING SETS grouping ऑपरेटर कवर किए। इनमें से GROUPING SETS सबसे ज़्यादा कस्टमाइज़ेबल है, जिससे आप ठीक वही aggregation स्तर बना सकते हैं जो आप चाहते हैं। GROUPING SETS किसी hierarchy के बारे में कोई अनुमान नहीं लगाता (जैसे ROLLUP करता है) और उचित संख्या में कॉलम के साथ भी मैनेजेबल रहता है (जैसे CUBE के विपरीत)।
इस अभ्यास में, हम अपने डेटा के साथ कुछ अनुमानों को परखना चाहते हैं:
- नवंबर 2019 में प्रशिक्षण शुरू करने के बाद से प्रति माह घटनाएँ कम हुई हैं।
- मंगलवार को अन्य कार्यदिवसों की तुलना में अधिक घटनाएँ होती हैं।
- सप्ताहांत में कार्यदिवसों की तुलना में अधिक घटनाएँ होती हैं।
यह अभ्यास पाठ्यक्रम का हिस्सा है
SQL Server में Time Series Analysis
अभ्यास निर्देश
ऊपर दिए गए अनुमानों के आधार पर grouping sets भरें। हम grand total के अलावा निम्नलिखित grouping sets देखना चाहते हैं:
- एक सेट कैलेंडर year और month के अनुसार
- एक सेट सप्ताह के दिन (day of the week) के अनुसार
- एक सेट इस आधार पर कि तारीख सप्ताहांत है या नहीं
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
SELECT
c.CalendarYear,
c.CalendarMonth,
c.DayOfWeek,
c.IsWeekend,
SUM(ir.NumberOfIncidents) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
GROUP BY GROUPING SETS
(
-- Each non-aggregated column from above should appear once
-- Calendar year and month
(___, ___),
-- Day of week
(___),
-- Is weekend or not
(___),
-- This remains empty; it gives us the grand total
()
)
ORDER BY
c.CalendarYear,
c.CalendarMonth,
c.DayOfWeek,
c.IsWeekend;