Maior valor de uma sub-consulta
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?
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
Curtidas 0
Melhor post
Fernando C
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:
é 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..
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..
GOSTEI 1
Mais Respostas
Fernando C
27/10/2016
ah, no meu exemplo, a chave estrangeira é essa coluna "id_usu", ok?
GOSTEI 1
Angela Massote
27/10/2016
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?
GOSTEI 0
Fernando C
27/10/2016
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):seleciona todos os usuarios (os 100 primeiros, mais precisamente) e seus totais de pedidos;
uma 2ª visão (View_2): apenas seleciona o maior numero de pedidos por usuario.
ai fiz uma consulta simples:
para selecionar, dentre todos os usuarios e seus pedidos, quais pedidos são iguais ao maior numero de pedidos..
aqui deu certo; tente ahe...
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
uma 2ª visão (View_2):
SELECT TOP (1) COUNT(id_usu) AS total2 FROM dbo.pedidos GROUP BY id_usu
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...
GOSTEI 1
David Styveen
27/10/2016
Boa tarde, Angela e Fernando.
Vocês podem utilizar a função WITH TIES da cláusula TOP.
Ficando algo do tipo:
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
GOSTEI 0