fazer order by em campo com SUM ?

Firebird

11/03/2010

bom dia caros colegas gostaria de tirar uma duvida não sei se é possivel, preciso fazer um relatório
onde ele me liste o ranking dos clientes que mais compraram.

fiz o seguinte select :

select v1.COD_CLIENTE , c.nom_cliente, sum(v1.TOT_LIQUIDO) as tot_liquido FROM vendas1 v1, cliente c
where c.cod_cliente=v1.cod_cliente
group by v1.cod_cliente, nom_cliente
order by   ?????????????????

bom até ai tá ok só que agora eu precisava ordenar esse resultado do sum meu do maior para o menor
mas quando coloco no order by o campo TOT_LIQUIDO dá um erro se sql (Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).
)

será que não posso tentar ordenar um valor agregado ?

existe alguma outra maneira de fazer esse select ordenando os cliente que compram mais?

Abs, agradeço a atenção de todos.

Felipe Sanches

Felipe Sanches

Felipe Sanches

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

11/03/2010

Caro Felipe,

Se você utiliza o Firebird 2.x, você pode colocar o ALIAS da coluna no "ORDER BY", mas se utiliza uma versão inferior coloque o índice da coluna (lembrando que o índice começa em 1). Exemplos:

Firebird 2.x
SELECT
  v1.Cod_Cliente,
  c.Nom_Cliente,
  SUM(v1.TOT_LIQUIDO) AS Tot_Liquido
FROM 
  VENDAS1 v1
    INNER JOIN CLIENTE c ON (c.Cod_Cliente = v1.Cod_Cliente)
GROUP BY
  v1.Cod_Cliente,
  Nom_Cliente
ORDER BY
  Tot_Liquido


Versão inferior ao Firebird 2.x

SELECT

  v1.Cod_Cliente, /* Índice 1 */

  c.Nom_Cliente,  /* Índice 2 */

  SUM(v1.TOT_LIQUIDO) AS Tot_Liquido  /* Índice 3 */

FROM 

  VENDAS1 v1

    INNER JOIN CLIENTE c ON (c.Cod_Cliente = v1.Cod_Cliente)
GROUP BY

  v1.Cod_Cliente,

  Nom_Cliente
ORDER BY

  3



Obs.: o mesmo vale para o "GROUP BY".


Espero ter colaborado.
GOSTEI 0
Felipe Sanches

Felipe Sanches

11/03/2010

Wilson, colocando o indice deu certo, obrigado pela ajuda

Abs
Felipe
GOSTEI 0
Wilson Junior

Wilson Junior

11/03/2010

Precisando é só postar.
GOSTEI 0
POSTAR