Sub-Consulta e Group By
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.
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
Curtidas 0
Respostas
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
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.
Obrigado pela ajuda. Vou continuar a fazer alguns testes.
GOSTEI 0
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á´
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