>
> 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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral