Maior valor de uma sub-consulta

27/10/2016

0

Bom dia Pessoal. Sou nova no Fórum e estou com um problema. Tenho uma tabela com os nomes dos funcionários e outra com os pedidos realizados por cada um. Preciso agrupar os pedidos pelo nome do funcionario e retornar o nome daquele que fez a maior quantidade de pedidos. Já tentei assim:

select funcionario.codf as codigo,max(count (*)) as quantia from funcionarios inner
join pedidos on funcionarios.codf=pedidos.codf
group by funcionarios.codf

Já tentei com subselect e não consigo fazer funcionar. Alguém poderia me dar uma ajuda?
Angela Massote

Angela Massote

Responder

Post mais votado

27/10/2016

olha... supondo que sua tabela de pedidos tenha uma chave
estrangeira relacionada ao id do funcionario,
esta consulta retornará apenas o nome do funcionario que fez mais pedidos seguido pelo total:

select  top 1 nome, count(id_usu) 'total_pedidos' from usuario,
pedidos where usuario.id=pedidos.id_usu
group by nome, id_usu order by 'total_pedidos' desc;


é bem simples,nem precisa sub consulta (se entendi bem),ok?
qualquer coisa retorne que eu vejo uma forma de postar umas figuras para ficar mais claro..

Fernando C

Fernando C
Responder

Mais Posts

27/10/2016

Fernando C

ah, no meu exemplo, a chave estrangeira é essa coluna "id_usu", ok?
Responder

27/10/2016

Angela Massote

Muito obrigada pelo retorno. Funcionou direitinho, o único problema que encontrei em utilizar o top é no caso de eu ter mais de um funcionário com o mesmo número de pedidos. Por esta razão pensei em usar o subselect. Você teria alguma ideia para resolver este caso?
Responder

28/10/2016

Fernando C

Oi.. puxa, vc tem razão, estava esquecendo do empate..
olha, um jeito que consegui aqui foi com subconsultas sim
mas com visões. a lógica:
a 1ª visão (chamei-a de View_1):
SELECT nome, COUNT(id_usu) AS total
FROM usuario INNER JOIN
pedidos ON usuario.id = pedidos.id_usu
GROUP BY nome, id_usu
ORDER BY 'total' DESC
seleciona todos os usuarios (os 100 primeiros, mais precisamente) e seus totais de pedidos;

uma 2ª visão (View_2):
SELECT TOP (1) COUNT(id_usu) AS total2
FROM dbo.pedidos
GROUP BY id_usu
apenas seleciona o maior numero de pedidos por usuario.

ai fiz uma consulta simples:
select * from View_1 where total=(select * from View_2)

para selecionar, dentre todos os usuarios e seus pedidos, quais pedidos são iguais ao maior numero de pedidos..
aqui deu certo; tente ahe...
Responder

07/11/2016

David Styveen

Boa tarde, Angela e Fernando.

Vocês podem utilizar a função WITH TIES da cláusula TOP.

Ficando algo do tipo:
select top (1) with ties funcionario.codf as codigo
	  ,count(*) as quantia 
from funcionarios 
inner join pedidos on funcionarios.codf=pedidos.codf
group by funcionarios.codf
order by quantia desc
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar