Re: [firebase-br] Ordenação por agrupamento

Jeferson Oliveira jefersonfoliveira em gmail.com
Sáb Jul 15 09:37:06 -03 2006


Não é possível fazer referência ao campo calculado pelo seu nome.
Mas há duas formas de resolver esse problema:

1) Repetir na cláusula order by, o cálculo do campo:

select P.*, (select sum(MV.QUANTIDADE)
             from MOVIMENTO_VENDA MV
             where MV.COD_PRODUTO=P.COD_PRODUTO) as QUANTIDADE
from PRODUTOS P
order by (select sum(MV.QUANTIDADE)
             from MOVIMENTO_VENDA MV
             where MV.COD_PRODUTO=P.COD_PRODUTO)

2) Referenciar o campo por sua posição na lista de campos retornado pelo
select. Suponhamos que a tabela produtos possua apenas dois campos: CODIGO e
DESCRICAO, assim o campo QUANTIDADE seria o terceiro campo retornado, então
teríamos:

select P.*, (select sum(MV.QUANTIDADE)
             from MOVIMENTO_VENDA MV
             where MV.COD_PRODUTO=P.COD_PRODUTO) as QUANTIDADE
from PRODUTOS P
order by 3

O segundo método é mais eficaz, pois não precisa efetuar novamente o
cálculo.
Observe que nos exemplos acima retirei a cláusula group by da subquery,
pois, como ela já está amarrada com a tabela produtos pelo código, não é
necessário agrupar.


Abraço!
Jeferson Oliveira



Mais detalhes sobre a lista de discussão lista