शुरू करेंमुफ़्त में शुरू करें

Filtered aggregates की गणना

यदि हम कुछ फ़िल्टर मानदंडों के आधार पर किसी घटना के होने की संख्या गिनना चाहते हैं, तो हम SUM(), MIN(), और MAX() जैसे aggregate फंक्शन के साथ-साथ CASE expressions का लाभ उठा सकते हैं। उदाहरण के लिए, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) incident type 1 से संबंधित incidents की गिनती लौटाएगा। यदि आप प्रत्येक incident type के लिए एक-एक SUM() स्टेटमेंट शामिल करते हैं, तो आपने डेटा सेट को incident type ID के अनुसार pivot कर दिया है।

इस परिदृश्य में, प्रबंधन यह जानना चाहता है कि incident type के हिसाब से हमारे पास कितने "big-incident" दिन बनाम "small-incident" दिन रहे हैं। प्रबंधन big-incident दिन को ऐसे दिन के रूप में परिभाषित करता है, जिसमें उसी incident type की 5 से अधिक घटनाएँ एक ही दिन में हुई हों, और small-incident दिन वह है जिसमें 1 से 5 घटनाएँ हुई हों।

यह अभ्यास पाठ्यक्रम का हिस्सा है

SQL Server में Time Series Analysis

पाठ्यक्रम देखें

अभ्यास निर्देश

  • ऐसा CASE expression भरें जो हमें SUM() फंक्शन का उपयोग करके big-incident और small-incident दिनों की संख्या निकालने दे।
  • CASE expression में, यदि उपयुक्त फ़िल्टर मानदंड पूरा हो तो 1 लौटाएँ, अन्यथा 0।
  • किसी कॉलम का संदर्भ देते समय alias ज़रूर लिखें, जैसे ir.IncidentDate या it.IncidentType!

इंटरैक्टिव व्यावहारिक अभ्यास

इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।

SELECT
	it.IncidentType,
    -- Fill in the appropriate expression
	SUM(___ WHEN ir.NumberOfIncidents > 5 THEN ___ ELSE ___ ___) AS NumberOfBigIncidentDays,
    -- Number of incidents will always be at least 1, so
    -- no need to check the minimum value, just that it's
    -- less than or equal to 5
    SUM(___ WHEN ir.NumberOfIncidents <= 5 THEN ___ ELSE ___ ___) AS NumberOfSmallIncidentDays
FROM dbo.IncidentRollup ir
	INNER JOIN dbo.IncidentType it
		ON ir.IncidentTypeID = it.IncidentTypeID
WHERE
	ir.IncidentDate BETWEEN '2019-08-01' AND '2019-10-31'
GROUP BY
it.IncidentType;
कोड संपादित करें और चलाएँ