Fala, pessoal! Tudo bem?
Hoje vou postar a solução do exercício 2994. Eu acabei de resolvê-lo.
Antes de resolver qualquer problema de SQL do URI (BEECROWD agora), 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: 2994
Enunciado:
Você trabalha no setor de TI de um Hospital e precisa calcular a receita de pagamento de cada um dos médicos. Cada médico ganha 150$ por hora mais uma porcentagem dependendo do turno de trabalho, por exemplo, o médico Wellington trabalhou 1 hora no turno do dia, e 2 horas no turno da noite, logo seu salário semanal será: ( ( 1 * 150 ) + 1% ) + ( ( 2 * 150 ) + 15% ) = 496.5. Além disso, você pode usar a função round(value,1) para exibir os salários com 1 casa decimal e ordene o resultado do maior para o menor salário.
Solução:
Esse exercício eu não achei dos mais fáceis. É preciso usar o operador de agregação SUM e obter as horas trabalhadas multiplicadas por 150, mais o bônus da respectiva hora da tabela work_shifts. Ou seja, quem trabalhou 10 horas de dia a uma taxa de 10%, recebe 10 x 150 + 150 x 0,1. Se esta mesma pessoa trabalhou 5 horas de noite a uma taxa de 20%, recebe 5 x 150 + 150 x 0,2. E tudo isso precisa ser somado (as horas trabalhadas em todos os turnos).
A fórmula que utilizei no SQL pode parecer um pouco complicada e diferente do que expliquei acima, mas vamos lá, por partes:
- attendances.hours * 150 representa o quanto ele ganha por hora.
- (attendances.hours * 15)*work_shifts.bonus)*.1 representa o bônus
O código que submeti na plataforma ficou assim:
SELECT doctors.name, ROUND(SUM((attendances.hours * 150)+((attendances.hours * 15)*work_shifts.bonus)*.1), 1) AS salary FROM doctors, attendances, work_shifts WHERE doctors.id=attendances.id_doctor AND work_shifts.id=attendances.id_work_shift GROUP BY doctors.name ORDER BY salary DESC;
Nenhum comentário:
Postar um comentário