alekanet 0 Denunciar post Postado Outubro 14, 2005 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
Motta 645 Denunciar post Postado Outubro 14, 2005 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
alphamek 2 Denunciar post Postado Outubro 21, 2005 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