ComeçarComece de graça

Calculando agregações com filtro

Se quisermos contar o número de ocorrências de um evento dado algum critério de filtro, podemos aproveitar funções de agregação como SUM(), MIN() e MAX(), além de expressões CASE. Por exemplo, SUM(CASE WHEN ir.IncidentTypeID = 1 THEN 1 ELSE 0 END) retornará a contagem de incidentes associados ao tipo de incidente 1. Se você incluir uma instrução SUM() para cada tipo de incidente, terá feito um pivoteamento do conjunto de dados por ID do tipo de incidente.

Neste cenário, a gerência quer que você informe, por tipo de incidente, quantos dias de “grande incidente” tivemos versus dias de “pequeno incidente”. A gerência define um dia de grande incidente como tendo mais de 5 ocorrências do mesmo tipo de incidente no mesmo dia, e um dia de pequeno incidente como tendo entre 1 e 5.

Este exercício faz parte do curso

Análise de Séries Temporais no SQL Server

Ver curso

Instruções do exercício

  • Complete uma expressão CASE que nos permita usar a função SUM() para calcular o número de dias de grande incidente e de pequeno incidente.
  • Na expressão CASE, você deve retornar 1 se o critério de filtro adequado for atendido e 0 caso contrário.
  • Não se esqueça de especificar o alias ao referenciar uma coluna, como ir.IncidentDate ou it.IncidentType!

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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;
Editar e executar o código