DesafioSQL – Desafio 5 (nível Intermediário)

Início Fóruns Desafios SQL – Lista de desafios DesafioSQL – Desafio 5 (nível Intermediário)

  • Este tópico está vazio.
Visualizando 0 resposta da discussão
  • Autor
    Posts
    • #907
      ————— Sobre o Desafio 5 —————

       

      Você trabalha em uma loja que vende vários produtos no valor de R$ 1,99 bem como alguns outros produtos com valor maior que R$1,99. Um analista de negócio precisa de um relatório que retorne informação sobre todos os clientes que  fizeram pedidos com apenas itens custando o mesmo valor, dessa forma, ele conseguiria identificar casos onde os clientes compraram apenas itens de R$1,99 e também outros pedidos onde todos os itens comprados tem o mesmo valor.

       

      Por exemplo:

       

       

      Considerando a imagem acima, podemos observar que o pedido 500000 tem 4 itens vendidos, 3 com valor de R$ 1,99 e 1 com o valor de R$104,06, sendo assim esse pedido não entra nos critérios mencionados. Porém, todos os itens vendidos para os pedidos 500001 e 500002 tem o mesmo valor, o pedido 500001 tem 5 itens no valor de R$ 15,99, e o pedido 500002 tem 3 itens  no valor de R$ 1,99, ou seja, todos os itens tem o mesmo valor.

       

      Preciso de uma consulta que retorne todos os casos, o resultado esperado é o seguinte:

       

       

      Seu resultado precisa bater 100% (considerando apenas as 17 linhas que estão sendo exibidas, é claro) com o da imagem acima, o total de linhas retornadas deve ser 13918, assim como na imagem acima, não se esqueça da ordenação, o resultado está ordenado por DataPedido (DESC) e PedidoID (DESC). Para visualizar o resultado completo, faça o download desse arquivo do excel com o resultado.

       

      Para referência, a performance que eu consegui na minha consulta foi de 444ms. Detalhes na imagem abaixo:

       

       

      E ai, consegue escrever essa query e bater meu tempo? :-)… Boa sorte e divirta-se.

       

      ————– Como executar o desafio ————–

      O “problema” do desafio é simulado via um aplicativo que simula as requisições mencionadas pelo usuário.

      Para executar o app e executar o load do desafio execute os seguintes passos:

      1. Clique aqui para fazer o download dos arquivos necessários para executar o desafio.
      2. Restaure o arquivo de backup (.bak) na instância SQL que será utilizada.
      3. Pronto, agora é começar a escrever a query.
      ————– Mais info e requisitos ————–
      • O nível desse desafio é Fabiano*.
      • Como o tempo pra execução do Desafio pode variar de acordo com os recursos de máquina do usuário, o baseline deve ser considerado com base na execução do desafio sem nenhuma alteração, ou seja, rode o desafio sem efetuar nenhuma alteração, guarde os tempos/uso de recursos e utilize esses números como base para trabalhar em uma solução.
        Por exemplo, se na sua máquina o desafio levou 5 minutos pra rodar, utilize esse número como base para trabalhar na sua solução.
      • O arquivo de banco foi criado no SQL Server 2019, portanto você precisa de uma instância nessa versão (preferencialmente a última release disponível) e edição developer.
      • É permitido efetuar qualquer alteração no schema do banco.
      • Obviamente, o resultado precisa ser consistente.
      • Otimizações com força bruta não serão consideradas, ou seja, não adianta adicionar mais recursos de hardware (CPU, Memória, disco e etc).
      • A solução deve necessáriamente conter as seguintes informações:
        Nome do desafio. (ex. “DesafioSQL – Desafio <N>”)
        Versão e edição do SQL Server utilizada. (@@Version é sua amiga, copia e cola o resultado dela pra gente.)
        Número de CPUs disponíveis para o SQL Server (MAXDOP utilizado na instância).
        Quantidade de memória em GB disponível para o SQL Server.
        Se a execução foi utilizando uma instância local (mesma máquina rodando o App de desafio) ou remota.
      • Sua solução precisa rodar na máquina dos avaliadores, ou seja, se sua solução “não funcionar” na minha máquina ela não será considerada. Usuários que dizerem que “na minha máquina funciona” ganharão um bônus por ousadia, e serão ignorados.
      • Se você tiver algum problema ao rodar o desafio, dúvida do que pode ou não pode fazer ou questionamento você pode entrar em contato conosco via e-mail ou utilizar o fórum de discussão dos desafios.
      • Todas as soluções válidas receberão uma nota que pode variar entre 0 a 100. Não há um prazo para envio da nota, porém, prometemos fazer o melhor possível pra conseguir enviar dentro de um tempo razoável. Todas as notas serão publicadas na página de Ranking junto com o nome do usuário que enviou a nota, caso você não queira que sua nota seja publicada, você deve nos informar via e-mail.

       

      * Nota: Legenda dos níveis:

       

      ————– Critérios avaliados na solução ————–

       

      • Clique aqui pra ver quais os critérios utilizados na avaliação e definir a pontuação.

       

      ————– Dúvidas e problemas ————–

       

Visualizando 0 resposta da discussão
  • O fórum ‘Desafios SQL – Lista de desafios’ está fechado para novos tópicos e respostas.