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:
- Ler todo enunciado do problema.
- Ler os tópicos do fórum em caso de dúvidas
- 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)
Problema: 2988
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.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