Začněte nyníZačněte zdarma

Výpočet filtrovaných agregátů

Pokud chceme spočítat počet výskytů určité události na základě zadaných kritérií, můžeme využít agregační funkce jako SUM(), MIN() a MAX() společně s výrazy CASE. Například SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) vrátí počet incidentů přiřazených k typu incidentu 1. Pokud přidáš jeden příkaz SUM() pro každý typ incidentu, přetransformujete (pivotujete) datovou sadu podle ID typu incidentu.

V tomto scénáři nás vedení žádá, abychom pro každý typ incidentu zjistili, kolik dnů bylo „velkých" a kolik „malých". Vedení definuje velký den jako den, kdy se stejný typ incidentu vyskytl více než 5krát, a malý den jako den s 1 až 5 výskyty.

Toto cvičení je součástí kurzu

Time Series Analysis in SQL Server

Zobrazit kurz

Pokyny k cvičení

  • Doplň výraz CASE, který ti umožní použít funkci SUM() k výpočtu počtu velkých a malých dnů.
  • Ve výrazu CASE vrať hodnotu 1, pokud je splněná příslušná podmínka filtru, jinak vrať 0.
  • Nezapomeň uvádět alias při odkazování na sloupec, například ir.IncidentDate nebo it.IncidentType!

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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;
Upravit a spustit kód