Estou criando uma procedure no SQL SERVER 7 para mostrar:
5 usuários que mais solicitaram empréstimos, ela está mostrando todos os usuários da tabela empréstimo, eu não estou sabendo como fazer que apareça só os 5 que mais solicitaram empréstimos, o código está abaixo:
Tem alguma maneira de limitar o número de linhas de um resultado select?
CREATE PROCEDURE ConsultaCincoMais AS
select u.Nome 'Nome' ,
Count(e.CodUsuario) 'Quantidade_Empréstimos'
from Emprestimo e inner join Usuario u
on e.CodUsuario = u.CodUsuario
group by u.Nome
order by Quantidade_Empréstimos desc
o comando SET ROWCOUNT define quantas linhas a query deve retornar como resultado. Eu não sei se dentro de uma procedure existe restrição para o seu uso. Bom, supondo que não haja restrição por parte do SQL SERVER a procedure ficaria da forma abaixo.
Abraços,
Vanderlei
CREATE PROCEDURE ConsultaCincoMais AS
– define retorno de 5 linhas
SET ROWCOUNT 5
select u.Nome ‘Nome’ ,
Count(e.CodUsuario) 'Quantidade_Empréstimos’
from Emprestimo e inner join Usuario u
on e.CodUsuario = u.CodUsuario
group by u.Nome
having count(e.CodUsuario) >= 5
order by Quantidade_Empréstimos desc
– define o valor default para todas as linhas
SET ROWCOUNT 0
Não conheço o SQL SERVER, trabalho com ORACLE, mas acho que o
HAVING COUNT() tem a mesma função. Portanto se vc deseja listar apenas os cinco clientes que fizeram mais empréstimos o HAVING COUNT() não vai te ajudar.
Se vc utilizar no ORACLE o “having count(e.CodUsuario) >= 5” ele retornará apenas os clientes que fizeram empréstimos por 5 ou mais vezes e não os cinco clientes que fizeram mais empréstimos.
Segue um exemplo no ORACLE de como listar os cinco clientes que fizeram mais empréstimos:
SELECT ROWNUM,
cliente,
qtdeEmprestimos
FROM (SELECT cli.cod_cli cliente,
COUNT() qtdeEmprestimos
FROM clientes cli,
emprestimos emp
WHERE cli.cod_cli = emp.cod_cli
GROUP BY cli.cod_cli
ORDER BY COUNT() DESC)
WHERE ROWNUM <= 5
select u.Nome ‘Nome’ ,
Count(e.CodUsuario) 'Quantidade_Empréstimos’
from Emprestimo e inner join Usuario u
on e.CodUsuario = u.CodUsuario
group by u.Nome
having count(e.CodUsuario) >= 5
order by Quantidade_Empréstimos desc
– define o valor default para todas as linhas
SET ROWCOUNT 0[/code]
select u.Nome ‘Nome’ ,
Count(e.CodUsuario) 'Quantidade_Empréstimos’
from Emprestimo e inner join Usuario u
on e.CodUsuario = u.CodUsuario
group by u.Nome
having count(e.CodUsuario) <= 5
order by Quantidade_Empréstimos desc
– define o valor default para todas as linhas
SET ROWCOUNT 0[/code]
creipi, usando SQL Server eu não sei se vai dar certo, mas com o MySQL é garantido, basta vc usar no final de sua query:
Da uma olhada neste exemplo:
T+[/quote]
È realmente funciona legal no my sql…agora não entendi uma coisa tipo eu coloquei LIMIT 0,5 vieram 2 registros-coloquei 0,15 vieram 8 registros
coloquei 0,30 vieram 11 registos…Qual o parametro usado para a escolha 0 é a primeirq e ,15 a ultima linha???
Estranho isso deveria ter vindo 0,15 15 linhas não}??