Pesquisar este blog

Livros Recomendados

terça-feira, 14 de julho de 2020

URI (BEECROWD) - 2988 - Campeonato Cearense - SQL - PostgreSQL

Outro exercício de SQL que soluciono e posto aqui. Veja a seguir.

Antes de resolver qualquer problema de SQL do URI, recomendamos seguir os seguintes passos:

  1. Ler todo enunciado do problema.
  2. Ler os tópicos do fórum em caso de dúvidas
  3. Preparar o esquema, conforme fornecido no problema. Obs.: muitas vezes o pessoal coloca o código de criação do esquema no fórum, então é só copiar!

Plataforma: URI (BEECROWD)

Problema2988

Solução:

Essa solução é uma das mais complexas entre os exercícios de SQL da plataforma URI! Ainda vou formular um texto melhor para explicá-la, mas basicamente o que você precisa saber é que a estrutura CASE ajuda muito na solução deste problema.

Talvez existam outras soluções, não parei para pensar nisso ainda. Você resolveu de forma semelhante?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SELECT teams.name, count(matches.team_1 + matches.team_2) AS matches,
  SUM(CASE
        WHEN (matches.team_1_goals > matches.team_2_goals
              AND teams.id = matches.team_1)
              OR (matches.team_2_goals > matches.team_1_goals
              AND teams.id = matches.team_2) THEN 1 ELSE 0 END) AS victories,
    SUM(CASE
        WHEN (matches.team_1_goals < matches.team_2_goals
              AND teams.id = matches.team_1)
              OR (matches.team_2_goals < matches.team_1_goals
              AND teams.id = matches.team_2) THEN 1 ELSE 0 END) AS defeats,
    SUM(CASE
        WHEN (matches.team_1_goals=matches.team_2_goals
              AND teams.id = matches.team_1)
              OR (matches.team_2_goals = matches.team_1_goals
              AND teams.id = matches.team_2) THEN 1 ELSE 0 END) AS draws,
  SUM(CASE
        WHEN (matches.team_1_goals=matches.team_2_goals
              AND teams.id = matches.team_1)
              OR (matches.team_2_goals = matches.team_1_goals
              AND teams.id = matches.team_2) THEN 1 ELSE 0 END) + 
  SUM(CASE
        WHEN (matches.team_1_goals>matches.team_2_goals
              AND teams.id = matches.team_1)
              OR (matches.team_2_goals > matches.team_1_goals
              AND teams.id = matches.team_2) THEN 3 ELSE 0 END) AS score
FROM teams, matches WHERE teams.id = matches.team_1 OR teams.id = matches.team_2
  GROUP BY teams.name ORDER BY score DESC;

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas