Evandro Ricardo Silvestre escreveu:
> ..:: Rodrigo (-_-) Machado ::.. wrote:
>> Bom dia pessoal, nao sei se posso postar este tipo de topico na lista,
>> mas ca estou eu.
>> Sou bem iniciando no mundo SQL, e preciso otimizar esta consulta.
>>
>> select c_cpd, sum(n_cant) from (
>> select c_cpd, sum(n_cant) as n_cant from movie
>> where c_sucursal>='001' and c_sucursal<='001'
>> group by c_cpd
>> union all
>> select c_cpd, sum(n_cant)*-1 as n_cant from movis
>> where c_sucursal>='001' and c_sucursal<='001'
>> group by c_cpd
>> ) as movi
>> group by c_cpd
>> order by c_cpd
> 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.
>
Creio que o correto seria FULL OUTER JOIN no lugar da (INNER) JOIN.
Poderia também simplificar para: sum(movie.n_cant - movis.n_cant)
SELECT coalesce(movie.c_cpd, movis.c_cpd) AS c_cpd,
sum(movie.n_cant - movis.n_cant) AS n_cant
FROM movie FULL OUTER JOIN movis ON (movis.c_cpd = movie.c_cpd)
GROUP BY 1
ORDER BY 1
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral