Sub-Consulta e Group By

Firebird

13/06/2006

Estou migrando do IB6 para o FB 1.5, e encontrei o seguinte problema:
No IB o sql abaixo roda perfeitamente, trazendo os dados certos. Já no FB, ocorre o erro
de agrupamento, considerando que a sub-consulta deve estar na clásula ´group by´.

select tabela1.campo1, sum(tabela1.campo2),
select max(tabela2.campo3) from tabela2 where tabela2.campo1=tabela1.campo1)
from tabela1
group by tabela1.campo1

Já tentei de várias formas, mas não obtive êxito. Pra não usar SP devo separar a subconsulta
do restante e executá-la para cada linha retornada do primeiro select?
Alguém tem a solução para isso?
Agradeco.


Drf

Drf

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

13/06/2006

não sei se houve algum erro na transcrição da instrução, mas está faltando um parentesis. o fato é que deveria funcionar.
select
  tabela1.campo1, sum(tabela1.campo2),
  (select
     max(tabela2.campo3) 
   from
     tabela2
   where
     tabela2.campo1=tabela1.campo1) Maior
from
  tabela1 
group by
  tabela1.campo1



GOSTEI 0
Drf

Drf

13/06/2006

Realmente foi um erro na transcrição do comando, existe sim o parentesis, ou seja, meu problema continua! rs
Obrigado pela ajuda. Vou continuar a fazer alguns testes.


GOSTEI 0
Orpolonio

Orpolonio

13/06/2006

As sub-consultas são permitidas sim, mas....
Para usa-las popule a tabela com 1 ou 2 milhões de registros e veja o tempo gasto, se testar com uma tabela pequena n terá como ver o desempenho.
Cito sempre isso pois, o MIN,MAX,SUBSELECTS devem ser susbtituidos por procedures sim, a cada MIN/MAX o servidor varre toda a tabela e o consumo de memória para isso pode levar seu sistema a uma lentidão n aceitavel...mesmo em uma tabela de UFs(Estados) com no maximo 26 registros multiplique estes por 500.000, vc teria 13.000.000 de registros, teria a noção extada do que o MIN/MAX faz.
Para todos um pequeno palpite, sempre povoe a tabela com milhões de registros para testar os selects, se ficar aceitável assim com menos seu sistema ´voará´


GOSTEI 0
POSTAR