SQL Server में median की गणना
SQL Server में MEDIAN() फंक्शन नहीं है. इसके सबसे नज़दीक PERCENTILE_CONT() है, जो किसी डेटा सेट में दिए गए nवें percentile पर आने वाली वैल्यू निकालता है.
हम यह जानना चाहते हैं कि हमारे incident rollup सेट में incident type के अनुसार median, mean से कितना अलग है. इसके लिए, हम पिछले अभ्यास के AVG() फंक्शन की तुलना PERCENTILE_CONT() से कर सकते हैं. ये window functions हैं, जिनके बारे में हम अध्याय 4 में विस्तार से पढ़ेंगे. अभी के लिए इतना जान लीजिए कि PERCENTILE_CONT() एक पैरामीटर लेता है, percentile (0 से 1 के बीच का दशमलव). अगर आपको डेटा को partition करना हो तो, percentile को WITHIN GROUP क्लॉज़ के अंदर एक ordered group में और किसी निश्चित रेंज OVER रखना होता है. WITHIN GROUP सेक्शन में, हमें उस कॉलम के अनुसार order करना है जिसका 50वाँ percentile हमें चाहिए.
यह अभ्यास पाठ्यक्रम का हिस्सा है
SQL Server में Time Series Analysis
अभ्यास निर्देश
PERCENTILE_CONT()के लिए missing वैल्यू भरें.WITHIN GROUP()क्लॉज़ के अंदर, number of incidents के अनुसार descending order करें.OVER()क्लॉज़ में,IncidentType(वास्तविक text वैल्यू, ID नहीं) के अनुसार partition करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
SELECT DISTINCT
it.IncidentType,
AVG(CAST(ir.NumberOfIncidents AS DECIMAL(4,2)))
OVER(PARTITION BY it.IncidentType) AS MeanNumberOfIncidents,
--- Fill in the missing value
PERCENTILE_CONT(___)
-- Inside our group, order by number of incidents DESC
WITHIN GROUP (ORDER BY ir.___ DESC)
-- Do this for each IncidentType value
OVER (PARTITION BY it.___) AS MedianNumberOfIncidents,
COUNT(1) OVER (PARTITION BY it.IncidentType) AS NumberOfRows
FROM dbo.IncidentRollup ir
INNER JOIN dbo.IncidentType it
ON ir.IncidentTypeID = it.IncidentTypeID
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
WHERE
c.CalendarQuarter = 2
AND c.CalendarYear = 2020;