> > Não sei se entendi direito, mas ai vai uma dica: > > select movie.c_cpd, sum(movie.n_cant + (movis.n_cant)*-1) as n_cant > from movie > JOIN movis ON (movis.c_cpd = movie.c_cpd) > where movie.c_sucursal>='001' and movie.c_sucursal<='001' > group by movie.c_cpd > > Apenas é necessário validar se o join que montei é valido para seu > escopo, olhando a estrutura do seu select acredito que seja. > Isso fica bem mais rapido e bem mais simples.
Obrigado pela resposta, testei sua consulta, funcionou certinho. Mas infelizmente, é muito mais lenta que a minha consulta. Veja o explain: 14677.89 contra 6785. GroupAggregate (cost=14677.89..43425.50 rows=5904 width=30) -> Merge Join (cost=14677.89..36974.43 rows=1269551 width=30) Merge Cond: (movie.c_cpd = movis.c_cpd) -> Index Scan using ind_cpd on movie (cost=0.00..3191.92 rows=25397 width=18) Filter: ((c_sucursal >= '001'::bpchar) AND (c_sucursal <= '001'::bpchar)) -> Materialize (cost=14677.63..15940.63 rows=101040 width=18) -> Sort (cost=14677.63..14930.23 rows=101040 width=18) Sort Key: movis.c_cpd -> Seq Scan on movis (cost=0.00..4378.40 rows=101040 width=18) Vale lembrar, que c_sucursal no ambiente que estou, em todos os registros tem '001', portanto acho q nao se faz necesario uso de indice.. Mas haverá outros ambientes que podem haver varias sucursais.. e tenho um indice para c_cpd. ajuda em algo: -- *:-.,_,.-:*'``'*:-.,_,.-:*:-.,_,.-:*'``'*:-.,_,.-: :: Rodrigo Machado :: FlaRo Sistemas Linux User #338262 Lat S25º49'20.11' - Lon W55º07'12.05'' *:-.,_,.-:*'``'*:-.,_,.-:*:-.,_,.-:*'``'*:-.,_,.-:
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral