Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alekanet

Query -

Recommended Posts

Pessoal,Vocês poderiam me ajudar, como faço para retornar em um resultado de query, por exemplo a lista dos 10 mais.Por exemplo:Quero a lista dos 10 clientes que mais compraram e o valor comprado.Segue a query, o que preciso fazer para trazer somente os 10 mais ?SELECT NOME,SUM(QUANTIDADE*PRECO) AS ValorCompradoFROM CLIENTE C,PEDIDO P,ITEMPEDIDO I,LIVRO Lwhere C.id_cliente=P.id_clienteAND P.pedido=I.pedidoAND I.isbn=L.isbnGROUP BY NOMEORDER BY 2 DESCAguardo retorno.Obrigada !

Compartilhar este post


Link para o post
Compartilhar em outros sites

ALGUNS DB´S TEM UMA SINTAXE PARA ISTO (TOP NO SQLSERVER POR EXEMPLO) , ORACLE NÃO ESTA QUERY FAZ ISTO , PORÉM É LENTA DEPENDENDO DO TAMANHO DA TABELA

 

SELECT *

FROM CLIENTES C1

WHERE 10 > (SELECT COUNT(*)

FROM (SELECT DISTINCT(VALOR_COMPRA) VALOR_COMPRA

FROM CLIENTES C2) T

WHERE T.VALOR_COMPRA > C1.VALOR_COMPRA)

ORDER BY 4 DESC

 

ELA TRAS OS 10 MAIORES E SE 3 EMPATAREM POR EXEMPLO TRAS 12 CLIENTES, MAS COMO DISSE PODE SER LENTA.

 

UMA GAMBIARRA

 

SELECT * FROM

(SELECT CLIENTE,VALOR

FROM CLIENTE

ORDER BY 2 DESC)

WHERE ROWNUM < 11

 

MAS SE HOUVER EMPATE AQUI NAO SERÁ LEVADO EM CONSIDERAÇÃO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma opção, No seu próprio SELECT troque o SUM por MAX, assim ele não irá somar, ele irá fazer a multiplicação dentro da função e retornar os valores máximos para essa tabela. Exemplo: SELECT NOME,MAX(QUANTIDADE*PRECO) AS ValorComprado FROM CLIENTE C, PEDIDO P, ITEMPEDIDO I, LIVRO L where rownum < 11 and C.id_cliente=P.id_cliente AND P.pedido=I.pedido AND I.isbn=L.isbn GROUP BY NOME ORDER BY 2 DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.