Bom dia...
Eu tenho a tabela medico (NumeroOrdemMedicos, Nome, Morada, Sexo, DataNascimento, NumeroBI, IDespecialidade, NumOrdemMedicosChefeEquipa
e a tabela cirurgia( IDCirurgia, DataCirurgia, HoraCirurgia, NumeroSala, NumeroOrdemMedicos, NumeroInternado)
Tenho de responde à pergunta QUAL O NOME DO MÉDICO COM MAIS CIRURGIAS EFECTUADAS?
Eu sei que aplicanco este comando:
select medico.nome, count(idcirurgia)
from cirurgia, medico
where cirurgia.numeroordemmedicos=medico.numeroordemmedicos
group by medico.nome
Consigo o número de cirurgias feitas por caa médico, mas na realidade o que eu quero é o máximo desse count porque quero o médico com o máximo de cirurgias....
Alguém me pode ajudar????
SQL MAX(COUNT())
-
- Rank: Estagiário Júnior
- Mensagens: 1
- Registrado em: Sex, 14 Dez 2012 6:48 pm
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
Olá 1991,
Haveria mais de uma forma de resolver este problema.
Não posso lhe garantir que a solução abaixo esteja 100% correta ou seja 100% performática. Você precisaria fazer um teste em seu ambiente:
1) Primeiro, tente verificar quantas cirurgias fez cada médico:
2) Tente verificar o total máximo de cirurgia que um médico fez (não importa o nome dele):
3) Construa uma única querie agora, colocando cada uma das queries acima como SUB-QUERIES da
principal. O que te interessa é listar todos os médicos cujo total de cirurgias seja igual
ao do médico que fez o maior número de cirurgias (lembre-se que pode ocorrer um empate
entre dois ou mais médicos):
Creio que os foristas podem lhe dar outras sugestões para resolver este problema.
Abraços,
Sergio Coutinho
Haveria mais de uma forma de resolver este problema.
Não posso lhe garantir que a solução abaixo esteja 100% correta ou seja 100% performática. Você precisaria fazer um teste em seu ambiente:
1) Primeiro, tente verificar quantas cirurgias fez cada médico:
SELECT MEDICO.NOME,
COUNT(IDCIRURGIA) AS TOT_CIRURGIAS
FROM CIRURGIA,
MEDICO
WHERE CIRURGIA.NUMEROORDEMMEDICOS = MEDICO.NUMEROORDEMMEDICOS
GROUP BY MEDICO.NOME
SELECT MAX(COUNT(IDCIRURGIA)) AS MAX_CIRURGIAS
FROM CIRURGIA
GROUP BY CIRURGIA.NUMEROORDEMMEDICOS
principal. O que te interessa é listar todos os médicos cujo total de cirurgias seja igual
ao do médico que fez o maior número de cirurgias (lembre-se que pode ocorrer um empate
entre dois ou mais médicos):
SELECT M.NOME,
M.TOT_CIRURGIAS
FROM (SELECT MEDICO.NOME,
COUNT(IDCIRURGIA) AS TOT_CIRURGIAS
FROM CIRURGIA,
MEDICO
WHERE CIRURGIA.NUMEROORDEMMEDICOS = MEDICO.NUMEROORDEMMEDICOS
GROUP BY MEDICO.NOME) M,
(SELECT MAX(COUNT(IDCIRURGIA)) AS MAX_CIRURGIAS
FROM CIRURGIA
GROUP BY CIRURGIA.NUMEROORDEMMEDICOS) C
WHERE M.TOT_CIRURGIAS = C.MAX_CIRURGIAS
ORDER BY M.NOME
Abraços,
Sergio Coutinho
- Marciel
- Rank: Analista Sênior
- Mensagens: 158
- Registrado em: Qui, 03 Mai 2007 10:12 am
- Localização: Vitória - ES
Sabe qual o cúmulo da ignorância, da apatia e da ira?
Não sei, não quero saber e tenho raiva de quem sabe.
Não sei, não quero saber e tenho raiva de quem sabe.
Dá pra fazer usando funções analíticas:
Porém assim somente um nome de médico será exibido.
SELECT MAX (M.NOME)KEEP (DENSE_RANK FIRST ORDER BY TOT_CIRURGIAS DESC NULLS LAST) AS MEDICO_MAIS_CIRURGIAS
FROM (SELECT MEDICO.NOME,
COUNT (IDCIRURGIA) AS TOT_CIRURGIAS
FROM CIRURGIA,
MEDICO
WHERE CIRURGIA.NUMEROORDEMMEDICOS = MEDICO.NUMEROORDEMMEDICOS
GROUP BY MEDICO.NOME) M
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes