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
Instruções do exercício
- Complete uma expressão
CASEque nos permita usar a funçãoSUM()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.IncidentDateouit.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;