Kom igångKom igång gratis

Beräkna filtrerade aggregat

Om vi vill räkna antalet förekomster av en händelse utifrån vissa filtervillkor kan vi använda aggregatfunktioner som SUM(), MIN() och MAX(), tillsammans med CASE-uttryck. Till exempel returnerar SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) antalet incidenter kopplade till incidenttyp 1. Om du inkluderar ett SUM()-uttryck för varje incidenttyp har du pivoterat datamängden efter incidenttyp-ID.

I det här scenariot vill ledningen veta hur många "stora-incident"-dagar respektive "små-incident"-dagar vi har haft, uppdelat per incidenttyp. Ledningen definierar en stor-incident-dag som en dag med fler än 5 förekomster av samma incidenttyp, och en liten-incident-dag som en dag med mellan 1 och 5 förekomster.

Den här övningen är en del av kursen

Tidsserieanalys i SQL Server

Visa kurs

Övningsinstruktioner

  • Fyll i ett CASE-uttryck som gör det möjligt att använda funktionen SUM() för att beräkna antalet stora-incident-dagar och liten-incident-dagar.
  • I CASE-uttrycket ska du returnera 1 om rätt filtervillkor är uppfyllt, annars 0.
  • Kom ihåg att ange alias när du refererar till en kolumn, till exempel ir.IncidentDate eller it.IncidentType!

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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;
Redigera och kör kod