12th Dec 2022 6 minutos de leitura Como usar CASO em ORDEM POR SQL Tihomir Babic sql aprender sql CASE Índice O que é uma declaração CASE? Caso no SELECT O CASO é usado somente em declarações SELECT? Quando uma declaração de caso é usada em um ORDER BY? Caso em ENCOMENDAR POR Outros Usos da Declaração CASE Deseja saber mais sobre a declaração CASE? Este artigo lhe mostrará como e quando usar CASO em um ORDEM POR cláusula. Você já usou alguma vez uma declaração CASE? Tenho certeza que você já usou, pelo menos em uma declaração SELECT. Mas você já a usou em uma cláusula ORDER BY? Não? Você usará, assim que eu lhe mostrar como! Não se preocupe se você nunca usou uma declaração CASE. Mostrarei e explicarei a você com um pequeno exemplo. Depois passarei para outros usos da declaração CASE, especialmente em uma cláusula ORDER BY. Se você quiser praticar usando a declaração CASE, recomendo nosso curso interativo Como Criar Relatórios Básicos em SQL. Ela contém quase 100 exercícios e está focada no uso de CASE em problemas práticos de SQL. Se você quer múltiplas fontes de conhecimento, aqui está um artigo que explica o que é CASE. O que é uma declaração CASE? Para simplificar, é uma declaração SQL que passa e retorna valores de acordo com as condições especificadas. É a maneira da SQL escrever a lógica IF-THEN-ELSE e consiste em cinco palavras-chave: CASE, WHEN, THEN, ELSE, e END. Quando usado em uma declaração SELECT, ele funciona assim: se for o caso em que a condição é cumprida, então devolver um determinado valor, ou senão devolver algum outro valor, e fim verificando as condições. A sintaxe é a seguinte: CASE WHEN THEN , WHEN THEN ELSE END AS Acho que esta sintaxe é melhor explicada pela forma como funciona em um exemplo. O uso mais básico de CASE está em uma declaração em SELECT, então vamos começar com um exemplo. Caso no SELECT Aqui está a tabela films Vou usar neste exemplo: idfilm_titleyeardirector 1True Grit2010The Coen Brothers 2Da 5 Bloods2020Spike Lee 3Alien1979Ridley Scott 4The Bridges Of Madison County1995Clint Eastwood 5Get Out2017Jordan Peele 6Annie Hall1977Woody Allen 7Goodfellas1990Martin Scorsese 8Dr.Strangelove1964Stanley Kubrick 9You Were Never Really Here2017Lynne Ramsay 10Albert Nobbs2011Rodrigo Garcia Agora, digamos que queremos escrever uma pergunta que, junto com as colunas da tabela, mostre uma coluna adicional com o século em que o título foi filmado. Um exemplo de consulta é parecido com este: SELECT *, CASE WHEN year < 2001 THEN '20th-century film' ELSE '21st-century film' END AS century FROM films; Esta consulta seleciona todas as colunas da tabela films. Em seguida, usa uma declaração CASE para colocar valores em uma nova coluna chamada século. Esta declaração significa: quando o ano da coluna está abaixo (ou seja, mais antigo que) 2001, então o valor no século da coluna deve ser "filme do século 20". Se não for, então o valor deve ser "filme do século 21". Vamos ver os resultados da consulta: idfilm_titleyeardirectorcentury 1True Grit2010The Coen Brothers21st-century film 2Da 5 Bloods2020Spike Lee21st-century film 3Alien1979Ridley Scott20th-century film 4The Bridges Of Madison County1995Clint Eastwood20th-century film 5Get Out2017Jordan Peele21st-century film 6Annie Hall1977Woody Allen20th-century film 7Goodfellas1990Martin Scorsese20th-century film 8Dr.Strangelove1964Stanley Kubrick20th-century film 9You Were Never Really Here2017Lynne Ramsay21st-century film 10Albert Nobbs2011Rodrigo Garcia21st-century film O CASO é usado somente em declarações SELECT? Não! Embora seja usado com mais freqüência ali, CASE não se limita às declarações SELECT. Por exemplo, você pode usá-la em cláusulas como IN, WHERE, HAVING, e ORDER BY. Usar uma declaração CASE em uma consulta uma vez não significa que você tenha atingido sua cota para usá-la. Você pode usá-la várias vezes em uma única consulta. Ou você pode usá-la apenas uma vez. Isto significa que você não precisa ter CASE em SELECT se você quiser usá-lo apenas em um ORDER BY. Por falar nisso, o ponto principal deste artigo é mostrar a você como funciona a declaração CASE em uma cláusula ORDER BY. Estou chegando lá agora. Quando uma declaração de caso é usada em um ORDER BY? A cláusula ORDER BY é usada para ordenar o resultado em ordem ascendente ou descendente. Deseja uma atualização sobre como funciona? Não há problema! Este artigo explica o que um ORDER BY faz. A introdução de uma declaração CASE aqui pode melhorar seu ORDER BY, permitindo que você ordene os resultados por alguns outros (e múltiplos) critérios. Por exemplo, você pode usá-la quando quiser ordenar os valores das cordas de acordo com alguns outros critérios além da ordem alfabética, como por exemplo, pelos cargos hierárquicos dos títulos de cargos em uma empresa. A utilização de uma declaração CASE também permite ordenar os dados de acordo com múltiplos critérios. Por exemplo, você pode querer ordenar seus usuários por país e nome, mas por país e estado, se eles forem dos EUA. Vou lhe mostrar um exemplo prático, e você saberá imediatamente do que estou falando. Caso em ENCOMENDAR POR Aqui, estaremos trabalhando com a tabela shopsque contém os seguintes dados: idshop_namecountrystatecity 1Zoltan's shopCroatiaNULLZagreb 2Ante PortasCroatiaNULLRijeka 3Green Mile 1USATennesseeMemphis 4Jan Pieter's PitaCroatiaNULLSplit 5Green Mile 2USATennesseeChattanooga 6Green Mile 3USANew OrleansLouisiana 7Krystyna's shopHungaryNULLPecs 8Quinn & SandyHungaryNULLGyor 9Green Mile 4USACaliforniaSan Francisco 10FragolaCroatiaNULLOsijek Temos que encomendar os dados por country primeiro. Depois, todas as lojas dentro do mesmo país devem ser classificadas por city. Se a loja estiver nos Estados Unidos, precisamos ordená-la em seguida pela coluna state. O código que resolve este pequeno problema é: SELECT * FROM shops ORDER BY country, CASE WHEN country = 'USA' THEN state ELSE city END; Ele seleciona todas as colunas da tabela shops. Em seguida, ordena o resultado primeiro por país, depois pelos critérios da declaração CASE. Ela diz que se country = 'USA', então o resultado é classificado por estado. Se não for, então é ordenado por city. Parece que este código de fato retorna o resultado desejado: idshop_namecountrystatecity 10FragolaCroatiaNULLOsijek 2Ante PortasCroatiaNULLRijeka 4Jan Pieter's PitaCroatiaNULLSplit 1Zoltan's shopCroatiaNULLZagreb 8Quinn & SandyHungaryNULLGyor 7Krystyna's shopHungaryNULLPecs 9Green Mile 4USACaliforniaSan Francisco 6Green Mile 3USANew OrleansLouisiana 5Green Mile 2USATennesseeChattanooga 3Green Mile 1USATennesseeMemphis Outros Usos da Declaração CASE Você também pode usar a declaração CASE com palavras-chave diferentes daquelas que mencionei. Por exemplo, você pode utilizá-la com DESC. Digamos que eu a coloquei no código acima: SELECT * FROM shops ORDER BY country, CASE WHEN country = 'USA' THEN state ELSE city END DESC; No exemplo anterior, eu omiti a palavra-chave DESC. O resultado é ordenado em ordem ascendente por padrão. Ao escrever DESC após a declaração CASE, você obtém as lojas dentro dos países encomendadas por city em ordem decrescente, não ascendente como no caso anterior. As lojas dos EUA são encomendadas por state, mas desta vez em ordem decrescente. Podemos ver o resultado aqui: idshop_namecountrystatecity 1Zoltan's shopCroatiaNULLZagreb 4Jan Pieter's PitaCroatiaNULLSplit 2Ante PortasCroatiaNULLRijeka 10FragolaCroatiaNULLOsijek 7Krystyna's shopHungaryNULLPecs 8Quinn & SandyHungaryNULLGyor 5Green Mile 2USATennesseeChattanooga 3Green Mile 1USATennesseeMemphis 6Green Mile 3USANew OrleansLouisiana 9Green Mile 4USACaliforniaSan Francisco Você também pode usar as declarações CASE com UPDATE, INSERT, e DELETE. Estes são chamados de declarações modificadoras de dados. Aqui está um artigo que explica como usar CASE com essas afirmações. Você também pode usá-lo para resumos condicionais. Deseja saber mais sobre a declaração CASE? Provavelmente, é uma surpresa para você que CASE declarações não sejam usadas somente em declarações SELECT. Você já viu que ela vem a calhar quando usada com um ORDER BY. Ela abre as possibilidades de solicitar resultados de consulta. Isso não é o fim. A declaração CASE pode ser usada com algumas outras declarações e palavras-chave, tais como declarações modificadoras de dados, ou mesmo DESC, IN, WHERE, e HAVING. Agora é hora de aprender mais e praticar o que se aprende. Você obtém tudo isso com nosso curso Funções Comuns em SQL . Este curso é uma parte de uma trilha muito mais ampla chamada SQL de A a Z. De que você está esperando? Tags: sql aprender sql CASE