22nd Feb 2024 17 minutos de leitura Explicação do SQL CASE WHEN: 10 exemplos fáceis para iniciantes Maria Durkin CASE aprender sql Índice Entendendo a sintaxe do CASE WHEN Sintaxe básica: CASE WHEN THEN CASE WHEN THEN ELSE Vários THENs em CASE WHEN Exemplos de uso do CASE WHEN na análise de dados Exemplo 1: Categorização de dados Exemplo 2: manipulação de valores NULL Exemplo 3: criação de colunas agregadas Exemplo 4: Análise de marketing Exemplo 5: Segmentação de clientes Exemplo 6: Categorização de produtos por faixa de preço Exemplo 7: Analisando o status do atendimento de pedidos Exemplo 8: Segmentação de clientes por frequência de compra Exemplo 9: Avaliação das classificações de desempenho dos funcionários Exemplo 10: Agrupamento de produtos por ano de lançamento 8 dicas para usar o CASE WHEN na análise de dados Além do básico com CASE WHEN A instrução CASE WHEN nos permite tomar decisões sobre nossos dados, categorizando e manipulando registros com base em condições específicas. Descubra como usar o CASE WHEN neste artigo. Imagine que você está decidindo o que vestir para o dia. Você pega o guarda-chuva se estiver chovendo; se não estiver, você o deixa em casa. Esse procedimento de tomada de decisão é essencialmente o mesmo que uma instrução SQL CASE WHEN. No âmbito do SQL, a instrução CASE WHEN funciona de forma muito semelhante a uma expressão if-then-else, permitindo-nos criar classificações personalizadas em uma consulta. Outras linguagens de programação usam lógica semelhante - por exemplo, o Python usa if, elif e else, e o JavaScript usa a instrução switch. O uso generalizado desse conceito nas linguagens de computador enfatiza sua importância: ele oferece aos usuários a capacidade de lidar com uma variedade de situações. No SQL, essa construção é uma ferramenta essencial para a análise de dados. Neste artigo, você encontrará exercícios práticos do mundo real usando a instrução CASE WHEN para análise de dados. Essa instrução permite que os analistas criem uma lógica personalizada para classificação e tomada de decisões em suas consultas. Como resultado, a precisão da consulta e a profundidade da análise são aprimoradas. Se isso parece interessante, por que não explorar nosso Como Criar Relatórios Básicos em SQL curso? Além de abordar os detalhes da sintaxe CASE WHEN, este curso também ensina como usar as funções de agregação SQL, como COUNT() e SUM(). Você aprenderá rapidamente como calcular médias, comparar agrupamentos de negócios e organizar consultas complexas. Agora, vamos nos aprofundar nas complexidades do SQL CASE WHEN e desmistificar a instrução por meio de alguns exemplos simples! Entendendo a sintaxe do CASE WHEN Para explorar as complexidades da instrução CASE WHEN, vamos detalhar sua sintaxe usando alguns exemplos. Sintaxe básica: CASE WHEN THEN Para começar, examinaremos a sintaxe mais simples da instrução SQL CASE WHEN. Essa construção é especialmente útil para segmentar registros de acordo com um determinado critério e gerar uma nova coluna para mostrar os resultados. Aqui está a sintaxe: SELECT column_name, CASE WHEN condition THEN result END AS new_column FROM your_table; Vamos explicar cada parte em detalhes: SELECT: Especifica as colunas a serem incluídas no conjunto de resultados. CASE: Avalia a condição especificada para cada linha do conjunto de dados. Isso inicia a lógica condicional. WHEN condition THEN result: Define a condição a ser verificada e o resultado a ser atribuído se a condição for atendida. Isso permite a classificação dinâmica dos dados. END: Marca o fim do CASE Significa que a avaliação das condições e a atribuição dos resultados estão concluídas. AS new_column: Cria uma nova coluna chamada new_column no conjunto de resultados. Essa coluna captura os resultados da avaliação CASE WHEN para cada linha. Essa abordagem é particularmente valiosa quando se deseja introduzir uma dimensão categórica nos dados com base em condições específicas. Na consulta abaixo, usamos o CASE WHEN para rotular as cidades com temperaturas superiores a 30 graus Celsius como High (alta): SELECT city, temperature, CASE WHEN temperature > 30 THEN 'High' END AS temperature_category FROM weather_data; Isso simplifica a análise do padrão de temperatura com rótulos de limite claros na nova coluna, contribuindo para um conjunto de dados mais expressivo e informativo para análise posterior. Observe que, nessa declaração, os registros que não atenderem à condição especificada terão um valor NULL na nova coluna. Isso nos leva à nossa próxima instrução. CASE WHEN THEN ELSE Sem uma cláusula ELSE, corremos o risco de nossa nova coluna conter valores NULL. Ao incorporar uma cláusula ELSE, essa construção fornece um resultado de fallback quando a condição não é satisfeita. Isso é útil quando se deseja garantir que todos os registros do conjunto de dados recebam um valor significativo na nova coluna. Aqui está a sintaxe: SELECT column_name, CASE WHEN condition THEN result ELSE alternative_result END AS new_column FROM your_table; Vamos detalhar as condições: WHEN condition THEN result: Define a condição primária a ser verificada e o resultado correspondente a ser atribuído se a condição for atendida. ELSE alternative_result: Especifica um resultado alternativo a ser atribuído quando a condição primária não for atendida Isso garante que a nova coluna não conterá valores NULL. Vamos voltar ao exemplo dos dados meteorológicos. Ao introduzir uma cláusula ELSE, as temperaturas abaixo do limite especificado agora serão rotuladas como Normal. Essa construção funciona bem para garantir que cada registro na nova coluna tenha um valor definido, o que melhora a precisão da análise de dados. Esta é a nova consulta: SELECT city, temperature, CASE WHEN temperature > 30 THEN 'High' ELSE 'Normal' END AS temperature_category FROM weather_data; Como você pode ver, todas as temperaturas abaixo de 30 graus Celsius são classificadas como normais; todas as temperaturas acima de 30 graus Celsius são altas. Vários THENs em CASE WHEN O que acontece se tivermos mais de uma condição que desejamos aplicar aos nossos dados? O exemplo a seguir mostra como usar a sintaxe da instrução CASE WHEN com várias condições. Isso oferece um método para classificar os dados de acordo com diferentes padrões: SELECT column_name, CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 -- Additional WHEN clauses as needed END AS new_column FROM your_table; Vamos detalhar as condições: WHEN condition1 THEN result1: Define a primeira condição a ser verificada e o resultado correspondente se essa condição for atendida. WHEN condition2 THEN result2: Especifica uma segunda condição e seu resultado associado. Cláusulas WHEN adicionais podem ser adicionadas para outras condições. Em uma instrução CASE com várias cláusulas WHEN, a ordem é significativa. As condições são avaliadas sequencialmente, e a primeira condição atendida determina o resultado. Quando uma condição é satisfeita, o resultado correspondente é retornado e as cláusulas WHEN subsequentes são ignoradas. Neste exemplo, se condition1 for verdadeiro para uma determinada linha, result1 será retornado e condition2 não será avaliado para essa linha. No contexto do nosso exemplo anterior de dados meteorológicos, a consulta final incorpora várias cláusulas, bem como uma cláusula ELSE para garantir que todos os registros que não atendam às condições de temperatura especificadas recebam um resultado não NULL. Essa estrutura garante que todos os registros da coluna temperature_category recebam um rótulo significativo, o que contribui para uma análise meteorológica mais abrangente e informativa. Aqui está a consulta: SELECT city, temperature, CASE WHEN temperature > 30 THEN 'High' WHEN temperature <= 30 AND temperature > 20 THEN 'Moderate' ELSE 'Low' END AS temperature_category FROM weather_data; Como você pode ver, agora temos três categorias de clima: Alta para temperaturas acima de 30 graus, Moderada para temperaturas entre 20 e 30 e Baixa para todas as outras temperaturas, ou seja, aquelas abaixo de 20 graus Celsius. Agora vamos aplicar esses conceitos a alguns problemas de análise de dados do mundo real. Exemplos de uso do CASE WHEN na análise de dados Exemplo 1: Categorização de dados Entender os dados de transação é importante para avaliar o comportamento de compra do cliente no contexto de um negócio de varejo. Vamos imaginar que você tenha um conjunto de dados de transações de vendas. Pode ser difícil obter rapidamente insights sobre a distribuição das transações e analisar os valores brutos das transações. Uma maneira de lidar com essa situação é agrupar as transações de acordo com o valor. Aqui está uma consulta que nos permite agrupar as transações nas categorias Alta, Média e Baixa: SELECT TransactionID, Amount, CASE WHEN Amount < 1000 THEN 'Low' WHEN Amount >= 1000 AND Amount < 5000 THEN 'Medium' WHEN Amount >= 5000 THEN 'High' ELSE 'Unknown' END AS TransactionCategory FROM SalesTransactions; Usando a expressão CASE, podemos categorizar as transações em grupos significativos, simplificando a análise e permitindo uma visão geral rápida dos padrões de transação. Uma transação com um valor de 980 será classificada como Baixa, enquanto uma transação com um valor de 5.200 será categorizada como Alta. Essa categorização dinâmica simplifica a análise e oferece uma visão geral rápida dos padrões de transação. Exemplo 2: manipulação de valores NULL O rastreamento de datas de pedidos é essencial para uma plataforma de comércio eletrônico; ele nos ajuda a compreender o comportamento do cliente e a desenvolver melhores programações de atendimento de pedidos. Digamos que você tenha um conjunto de dados em que a coluna OrderDate contenha um grande número de valores NULL. Ao examinar os dados relacionados a pedidos, os valores ausentes na coluna OrderDate podem causar mal-entendidos ou confusão. Então, vamos escrever uma consulta que coloque os pedidos em dois grupos: aqueles com uma data de pedido(Order Placed) e aqueles sem data de pedido. SELECT CustomerID, OrderDate, CASE WHEN OrderDate IS NULL THEN 'No Order Date' ELSE 'Order Placed' END AS OrderStatus FROM Orders; Aqui, a expressão CASE distingue entre registros com e sem data de pedido, fornecendo rótulos claros e aumentando a precisão da análise de dados. Uma linha com NULL OrderDate será rotulada como No Order Date (Sem data de pedido), indicando que nenhuma data de pedido específica foi registrada para essa transação. Por outro lado, uma linha com um OrderDate específico, como 2023-10-12, será rotulada como Order Placed, indicando que um pedido foi feito e tem uma data de pedido específica. Exemplo 3: criação de colunas agregadas Para otimizar a produção e o gerenciamento de estoque, uma empresa de manufatura pode tentar determinar o nível de demanda de seus produtos. Os diferentes níveis de demanda para diferentes produtos podem não ser imediatamente aparentes quando se observa a quantidade total vendida. Portanto, colunas adicionais podem ser criadas no conjunto de resultados por meio da agregação de dados com base em condições ou critérios específicos. Vamos analisar um exemplo de consulta: SELECT ProductID, SUM(Quantity) AS TotalQuantity, CASE WHEN SUM(Quantity) > 100 THEN 'High Demand' ELSE 'Normal Demand' END AS DemandLevel FROM OrderDetails GROUP BY ProductID; Aqui, a expressão CASE gerencia a categorização dinâmica dos níveis de demanda, permitindo que a empresa identifique produtos de alta demanda e ajuste os planos de produção de acordo. Uma linha com TotalQuantity de 120 será rotulada como High Demand (Alta demanda), o que significa uma demanda robusta para esse produto específico. Por outro lado, uma linha com TotalQuantity de 80 será rotulada como Demanda Normal, indicando um nível de demanda padrão para esse produto específico. Exemplo 4: Análise de marketing Imagine que você é um varejista on-line que deseja planejar campanhas de marketing e estocagem de estoque analisando a sazonalidade dos pedidos dos clientes. É um desafio identificar épocas de pico ou tendências trimestrais ao visualizar os pedidos sem classificar os dados por tempo; é por isso que analisamos os dados com base em intervalos de datas e oferecemos insights sobre padrões temporais. SELECT OrderDate, COUNT(*) AS OrderCount, CASE WHEN OrderDate BETWEEN '2023-01-01' AND '2023-03-31' THEN 'Q1' WHEN OrderDate BETWEEN '2023-04-01' AND '2023-06-30' THEN 'Q2' -- Add more quarters as needed END AS Quarter FROM Orders GROUP BY OrderDate; Usando a expressão CASE, organizamos os pedidos em trimestres. Uma linha com um OrderDate de 2023-02-15 será rotulada como Q1, o que significa que o pedido está dentro do primeiro trimestre do ano. Um pedido feito em 2023-05-20 será rotulado como Q2, indicando sua colocação no segundo trimestre. Isso permite que você crie estratégias de marketing e ajuste os níveis de estoque com base na demanda sazonal. Exemplo 5: Segmentação de clientes Um serviço que cobra uma assinatura procura personalizar seus produtos e táticas de marketing de acordo com os hábitos de compra de seus usuários. Ao preparar determinados relatórios, um analista precisará agrupar os clientes com base em vários critérios; no exemplo abaixo, segmentamos os clientes em grupos de acordo com seus hábitos de consumo: SELECT CustomerID, SUM(PurchaseAmount) AS TotalPurchase, CASE WHEN SUM(PurchaseAmount) < 1000 THEN 'Bronze' WHEN SUM(PurchaseAmount) < 5000 THEN 'Silver' WHEN SUM(PurchaseAmount) < 10000 THEN 'Gold' ELSE 'Platinum' END AS CustomerSegment FROM Purchases GROUP BY CustomerID; A expressão CASE segmenta os clientes em categorias, permitindo que o provedor de serviços ofereça promoções, descontos ou serviços personalizados com base no nível de gastos de cada segmento de clientes. Exemplo 6: Categorização de produtos por faixa de preço Exercício: Compreender a distribuição dos preços dos produtos em um site de comércio eletrônico é essencial para tomar decisões informadas sobre preços e marketing. Com tantos produtos disponíveis, pode ser difícil obter insights. Você foi solicitado a simplificar os dados para que seu chefe possa entender o ambiente de preços e tomar decisões melhores. O resultado desse exercício deve conter as colunas ProductID, ProductName, Price e PriceCategory para cada produto. A coluna PriceCategory deve categorizar os produtos da seguinte forma: Preço baixo: Atribuída a produtos com preços abaixo de 50. Preço moderado: Atribuído a produtos com preços entre 50 e 100. Preçoalto: Atribuído a produtos com preços acima de 100. Solução: SELECT ProductID, ProductName, Price, CASE WHEN Price < 50 THEN 'Low Price' WHEN Price >= 50 AND Price < 100 THEN 'Moderate Price' WHEN Price >= 100 THEN 'High Price' END AS PriceCategory FROM Products; Saída: ProductIDProductNamePricePriceCategory 1Ultimate Headphones30Low Price 2Smartwatch XL80Moderate Price 3High-Performance Laptop120High Price Explicação da solução: Este exemplo usa efetivamente a instrução CASE WHEN para categorizar os produtos por faixa de preço. As condições são claras e os rótulos resultantes são significativos, permitindo uma análise mais fácil. Exemplo 7: Analisando o status do atendimento de pedidos Exercício: Em uma loja on-line, garantir que os pedidos sejam entregues no prazo é fundamental para a satisfação do cliente. Com um grande volume de pedidos, é difícil obter insights. Como você pode melhorar a análise de dados para rastrear e otimizar o atendimento de pedidos? O resultado esperado desse exercício deve apresentar um detalhamento claro de cada pedido, incluindo as colunas OrderID, OrderDate, ShippedDate e FulfillmentStatus. A coluna FulfillmentStatus categoriza os pedidos em três grupos: Not Shipped (Não enviado): Indica os pedidos que estão aguardando envio com um NULL ShippedDate. Shipped Late (Enviado com atraso): Designa pedidos em que o ShippedDate excede três dias a partir do OrderDate, sinalizando um atraso. Shipped On Time (Enviado dentro do prazo): aplica-se a pedidos enviados dentro de três dias do OrderDate, garantindo o atendimento em tempo hábil. Solução: SELECT OrderID, OrderDate, ShippedDate, CASE WHEN ShippedDate IS NULL THEN 'Not Shipped' WHEN ShippedDate > DATEADD(day, 3, OrderDate) THEN 'Shipped Late' ELSE 'Shipped On Time' END AS FulfillmentStatus FROM Orders; Saída: OrderIDOrderDateShippedDateFulfillmentStatus 12023-01-102023-01-12Shipped On Time 22023-02-15NULLNot Shipped 32023-03-202023-03-25Shipped Late Explicação da solução: Esse exemplo mostra o uso eficaz do CASE WHEN para categorizar os pedidos por status de atendimento. As condições são estruturadas de forma lógica, fornecendo insights claros sobre o processo de atendimento. A consulta está alinhada com as dicas discutidas anteriormente, abordando valores NULL para que os pedidos sem data de remessa não sejam registrados como NULL. Exemplo 8: Segmentação de clientes por frequência de compra Exercício: No varejo on-line, é fundamental entender os hábitos de compra dos clientes. Mas quando você tem uma grande base de clientes, obter insights claros é um desafio. Leve isso em conta neste exercício, pois você deverá segmentar os clientes com base na frequência de compra. O resultado esperado deste exercício deve fornecer uma visão segmentada dos clientes com base em sua frequência de compra. Ela deve incluir CustomerID, TotalOrders e CustomerSegment. A coluna CustomerSegment categoriza os clientes em três grupos: Infrequent Shopper (comprador pouco frequente): Aplicado a clientes com uma frequência de compra de um pedido. Compradorregular: Aplicado a clientes com uma frequência de compra entre dois e cinco pedidos. Compradorfrequente: Aplicado a clientes com uma frequência de compra superior a cinco pedidos. Solução: SELECT CustomerID, COUNT(OrderID) AS TotalOrders, CASE WHEN COUNT(OrderID) = 1 THEN 'Infrequent Shopper' WHEN COUNT(OrderID) >= 2 AND COUNT(OrderID) <= 5 THEN 'Regular Shopper' WHEN COUNT(OrderID) > 5 THEN 'Frequent Shopper' END AS CustomerSegment FROM Orders GROUP BY CustomerID; Saída: CustomerIDTotalOrdersCustomerSegment 1013Regular Shopper 1021Infrequent Shopper 1038Frequent Shopper Explicação da solução: Neste exemplo, incluímos funções agregadas com a instrução CASE WHEN para categorizar os clientes por frequência de pedido. Dessa forma, podemos categorizar os clientes com base na frequência de seus gastos no site. Você pode encontrar mais exemplos de combinação de funções agregadas com a instrução CASE WHEN em nosso artigo Como Usar CASE WHEN com SUM() em SQL. Exemplo 9: Avaliação das classificações de desempenho dos funcionários Exercício: Para tomar decisões eficazes de RH, é essencial avaliar o desempenho dos funcionários. No entanto, com tantos funcionários, o processo de análise é complexo. Como você pode simplificar a análise de dados para avaliar e categorizar os funcionários com base nas pontuações de produtividade? O resultado esperado desse exercício deve simplificar a análise do desempenho dos funcionários, fornecendo uma avaliação clara de cada funcionário. Ele deve retornar as colunas EmployeeID, ProductivityScore e PerformanceRating. A coluna PerformanceRating categoriza os funcionários em três grupos: Excelente: Aplicada a funcionários com um ProductivityScore de 90 ou mais, indicando desempenho excepcional. Bom: Aplicado a funcionários com um ProductivityScore entre 70 e 89, refletindo um bom desempenho. Precisa melhorar: Aplicado a funcionários com um ProductivityScore abaixo de 70, indicando áreas em que é necessário melhorar. Solução: SELECT EmployeeID, ProductivityScore, CASE WHEN ProductivityScore >= 90 THEN 'Excellent' WHEN ProductivityScore >= 70 AND ProductivityScore < 90 THEN 'Good' WHEN ProductivityScore < 70 THEN 'Needs Improvement' END AS PerformanceRating FROM Employees; Saída: EmployeeIDProductivityScorePerformanceRating 20195Excellent 20275Good 20360Needs Improvement Explicação da solução: Ao definir intervalos para o desempenho com a declaração CASE WHEN, podemos categorizar os funcionários com base nas pontuações de produtividade. Como as condições são claras, as classificações de desempenho resultantes fornecem percepções acionáveis. Exemplo 10: Agrupamento de produtos por ano de lançamento Exercício: O gerenciamento do estoque de produtos requer a compreensão dos ciclos de vida dos produtos. Em um catálogo grande, a identificação de padrões pode ser complicada. Como você pode simplificar isso para agrupar efetivamente os produtos com base em seus anos de lançamento? O resultado esperado deste exercício deve fornecer um agrupamento claro de produtos com base em seus anos de lançamento. Deve incluir as colunas ProductID, ProductName, ReleaseYear e ReleaseCategory. A coluna ReleaseCategory categoriza os produtos em três grupos: Nova versão: Aplicado a produtos lançados no ano de 2023, indicando as últimas adições ao catálogo. Recent Release (Versão recente): Aplicado a produtos lançados entre 2018 e 2022, indicando itens introduzidos recentemente. Versãoantiga: Aplicado a produtos lançados antes do ano de 2018, identificando itens mais antigos no catálogo. Solução: SELECT ProductID, ProductName, EXTRACT(YEAR FROM ReleaseDate) AS ReleaseYear, CASE WHEN EXTRACT(YEAR FROM ReleaseDate) = 2023 THEN 'New Release' WHEN EXTRACT(YEAR FROM ReleaseDate) >= 2018 AND EXTRACT(YEAR FROM ReleaseDate) < 2023 THEN 'Recent Release' WHEN EXTRACT(YEAR FROM ReleaseDate) < 2018 THEN 'Old Release' END AS ReleaseCategory FROM Products; Saída: ProductIDProductNameReleaseYearReleaseCategory 1Chic Denim Jacket2022New Release 2Lunar Maxi Dress2019Recent Release 3Flare Athletic Leggings2015Old Release Explicação da solução: Este exemplo final mostra a versatilidade de CASE WHEN. Aqui, nós o usamos com as funções DATETIME para categorizar os produtos com base em seus anos de lançamento. 8 dicas para usar o CASE WHEN na análise de dados Aqui estão 10 dicas para ajudá-lo a aproveitar ao máximo a instrução CASE WHEN: Entenda seus dados: Antes de implementar o CASE WHEN, certifique-se de entender claramente os dados com os quais está trabalhando. Identifique as condições ou os critérios específicos que agregarão valor à sua análise. Comece com simplicidade: Se você não estiver acostumado a usar o CASE WHEN, comece com condições simples. Você pode aumentar gradualmente a complexidade conforme necessário. Isso garante que seu código permaneça legível e mais fácil de solucionar problemas. Use rótulos significativos: Ao categorizar os dados, escolha rótulos que sejam claros e significativos. Isso melhora a interpretabilidade de seus resultados e torna a análise mais acessível a outras pessoas. Considere os tipos de dados: Certifique-se de que os tipos de dados em suas condições correspondam aos dados que está examinando. Tipos de dados incompatíveis podem levar a comportamentos inesperados e erros. Combine as condições de forma lógica: Use os operadores AND e OR para expressar condições compostas. Os parênteses podem ajudar a esclarecer a ordem de avaliação. Trate os valores NULL: Considere a possibilidade de usar as condições IS NULL, IS NOT NULL ou ELSE para tratar explicitamente quaisquer colunas em sua análise que possam ter NULL Utilize colunas agregadas: CASE WHEN é particularmente útil ao criar colunas agregadas. Por exemplo, você pode categorizar grupos com base em valores agregados (por exemplo, totais ou médias) para obter insights sobre padrões ou tendências. Teste e valide: teste suas declarações CASE WHEN em um subconjunto menor dos dados antes de aplicá-las a todo o conjunto de dados. Isso ajuda a detectar qualquer problema inesperado e garante que a lógica funcione como pretendido. Além do básico com CASE WHEN A instrução CASE WHEN no SQL é uma ferramenta essencial. Ela oferece uma abordagem estruturada e flexível à lógica condicional, que reflete a tomada de decisões cotidianas. Além disso, sua natureza intuitiva a torna um recurso acessível e poderoso do SQL. Se você precisar criar classificações personalizadas, lidar com valores NULL e categorizar dados dinamicamente, a instrução CASE WHEN é um verdadeiro recurso. Quer você seja um iniciante em SQL ou um analista experiente, dominar a instrução CASE WHEN é uma etapa fundamental para desbloquear camadas mais profundas da análise de dados. Aprofunde-se em suas complexidades com nossos artigos Como usar CASE WHEN em ORDER BY e Como utilizar o CASE WHEN em GROUP BY. E para uma experiência de aprendizado interativa, confira nosso Como Criar Relatórios Básicos em SQL curso. Bom aprendizado! Tags: CASE aprender sql