Re: [pgbr-geral] Dúvida em bloco anonimo

2016-06-14 Por tôpico Jean Alysson
Olá,

agora deu certo, o bloco está correto, o problema era na tabela com chave
primária incorreta, estava inserindo e duplicando
É que tinha milhoes de registros e não percebi.

Obrigado

Em 14 de junho de 2016 08:28, Jean Alysson <jeanp...@gmail.com> escreveu:

> Ola, não persistiu nada na tabela, na tela exibiu a mensagem :
> Query OK, 0 rows affected (execution time: 734 ms; total time: 734 ms)
>
> Os selects separados retornam os dados de acordo com os IDs informados.
>
> Obrigado
>
> Em 14 de junho de 2016 06:16, JotaComm <jota.c...@gmail.com> escreveu:
>
>> Opa!
>>
>> Em 13 de junho de 2016 21:20, Jean Alysson <jeanp...@gmail.com> escreveu:
>>
>>> Ola, preciso popular a tabela EmpresaServicoUsuario com os dados dos IDs
>>> de tres tabelas: usuarios,, servicos e empresa,
>>> escrevi o bloco abaixo (tendo certeza dos IDs dos existentes, 320,287
>>> ...)
>>> mas nao gerou nada, tem algo errado ?
>>>
>>>
>>> DO $$
>>> DECLARE ru record;
>>> DECLARE rsss record;
>>> DECLARE rse record;
>>> BEGIN
>>>  FOR usu IN SELECT idusuario FROM usuarios WHERE idusuario IN (320,287)
>>>  LOOP
>>>
>>>  FOR ser IN SELECT idservico FROM servicos WHERE idservico IN (11,17)
>>>  LOOP
>>>
>>>  FOR emp IN SELECT idempresa FROM empresas WHERE idempresa = 50
>>>  LOOP
>>>EXECUTE 'INSERT INTO EmpresaServicoUsuario (idusuario, idservico,
>>> idempresa) values
>>> ('||usu.idusuario||','||ser.idservico||','||emp.idempresa||')';
>>>  END LOOP;
>>>
>>>  END LOOP;
>>>
>>>  END LOOP;
>>> END$$;
>>>
>>> deveria gerar os registros:
>>> 320,11,50
>>> 320,17,50
>>> 287,11,50
>>> 287,17,50
>>>
>>
>> ​Não gerou significa que não mostrou nada na tela ou não persistiu na
>> tabela?​
>>
>>
>>>
>>> --
>>> Atenciosamente
>>> Jean Alysson Ambrosio
>>>
>>> _______
>>> pgbr-geral mailing list
>>> pgbr-geral@listas.postgresql.org.br
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>
>>
>> ​Abraços​
>>
>> --
>> JotaComm
>> http://jotacomm.wordpress.com
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
>
> --
> Atenciosamente
> Jean Alysson Ambrosio
>



-- 
Atenciosamente
Jean Alysson Ambrosio
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Dúvida em bloco anonimo

2016-06-14 Por tôpico Jean Alysson
Ola, não persistiu nada na tabela, na tela exibiu a mensagem :
Query OK, 0 rows affected (execution time: 734 ms; total time: 734 ms)

Os selects separados retornam os dados de acordo com os IDs informados.

Obrigado

Em 14 de junho de 2016 06:16, JotaComm <jota.c...@gmail.com> escreveu:

> Opa!
>
> Em 13 de junho de 2016 21:20, Jean Alysson <jeanp...@gmail.com> escreveu:
>
>> Ola, preciso popular a tabela EmpresaServicoUsuario com os dados dos IDs
>> de tres tabelas: usuarios,, servicos e empresa,
>> escrevi o bloco abaixo (tendo certeza dos IDs dos existentes, 320,287 ...)
>> mas nao gerou nada, tem algo errado ?
>>
>>
>> DO $$
>> DECLARE ru record;
>> DECLARE rsss record;
>> DECLARE rse record;
>> BEGIN
>>  FOR usu IN SELECT idusuario FROM usuarios WHERE idusuario IN (320,287)
>>  LOOP
>>
>>  FOR ser IN SELECT idservico FROM servicos WHERE idservico IN (11,17)
>>  LOOP
>>
>>  FOR emp IN SELECT idempresa FROM empresas WHERE idempresa = 50
>>  LOOP
>>EXECUTE 'INSERT INTO EmpresaServicoUsuario (idusuario, idservico,
>> idempresa) values
>> ('||usu.idusuario||','||ser.idservico||','||emp.idempresa||')';
>>  END LOOP;
>>
>>  END LOOP;
>>
>>  END LOOP;
>> END$$;
>>
>> deveria gerar os registros:
>> 320,11,50
>> 320,17,50
>> 287,11,50
>> 287,17,50
>>
>
> ​Não gerou significa que não mostrou nada na tela ou não persistiu na
> tabela?​
>
>
>>
>> --
>> Atenciosamente
>> Jean Alysson Ambrosio
>>
>> ___
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
> ​Abraços​
>
> --
> JotaComm
> http://jotacomm.wordpress.com
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Atenciosamente
Jean Alysson Ambrosio
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Dúvida em bloco anonimo

2016-06-13 Por tôpico Jean Alysson
Ola, preciso popular a tabela EmpresaServicoUsuario com os dados dos IDs de
tres tabelas: usuarios,, servicos e empresa,
escrevi o bloco abaixo (tendo certeza dos IDs dos existentes, 320,287 ...)
mas nao gerou nada, tem algo errado ?


DO $$
DECLARE ru record;
DECLARE rsss record;
DECLARE rse record;
BEGIN
 FOR usu IN SELECT idusuario FROM usuarios WHERE idusuario IN (320,287)
 LOOP

 FOR ser IN SELECT idservico FROM servicos WHERE idservico IN (11,17)
 LOOP

 FOR emp IN SELECT idempresa FROM empresas WHERE idempresa = 50
 LOOP
   EXECUTE 'INSERT INTO EmpresaServicoUsuario (idusuario, idservico,
idempresa) values
('||usu.idusuario||','||ser.idservico||','||emp.idempresa||')';
 END LOOP;

 END LOOP;

 END LOOP;
END$$;

deveria gerar os registros:
320,11,50
320,17,50
287,11,50
287,17,50

-- 
Atenciosamente
Jean Alysson Ambrosio
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Dúvida em select

2016-06-05 Por tôpico Jean Alysson
Boa noite,

preciso de ajuda no seguinte cenario:

tenho uma tabela com
idpedido - idproduto - situacao - quantidade
1  1 F  2
1  1 C  2

2  1 F  3

3  1 F  5
3  1 C  5
3  1 E  5

onde F=fechado  C=cancelado   E=excluido

preciso do total das quantidades vendidas, descontando o que foi cancelado
ou excluido, mas sendo cancelado e excluido, desconta 2 vezes e fica
errado, uso o seguinte select:

select sum(
case when situacao = 'F' then quantidade
else
quantidade * -1
end) as total
from tabela

funciona quando o pedido é fechado e cancelado ou fechado e excluido, mas
no caso do pedido 3
ele é fechado, cancelado e excluido, ficando com valor negativo, como posso
resolver ?

Obrigado
Jean Alysson
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Dúvida em select

2016-05-05 Por tôpico Jean Alysson
Em 05/05/2016 11:09, "Tiago José Adami" <adam...@gmail.com> escreveu:
>
> Em 4 de maio de 2016 23:10, Jean Alysson <jeanp...@gmail.com> escreveu:
> > Ola Tiago, está correta sua dedução
> > obrigado pela resposta !
> >
> > Estou começando com PostgreSql, então gostaria de saber se dessa forma
eu
> > teria boa performance ?
> > Esta solução com subselect poderia ser feita sem usar 2 selects  ? over
> > partition, with query ou algo assim ?
> >
>
> Olá Jean.
>
> Evite o top posting, prefira sempre escrever abaixo das mensagens
> anteriores. Isto facilita a leitura.
>
> Não é exclusividade do PostgreSQL, o desempenho vai depender de vários
> fatores como: número de registros, índices criados e número de campos
> (atributos) envolvidos na cláusula WHERE.
>
> É possível reescrever esta consulta de várias maneiras. É possível
> também utilizando window functions, mas acredito que o esforço será
> maior, o código SQL será maior e o desempenho será pior, haja vista
> que mais registros serão lidos do banco de dados e trazidos para a
> memória para realização de operações de ordenação, causando uso
> adicional de CPU.
>
> O que vai impactar mais no desempenho da consulta como descrevi são os
> índices sobre a tabela. Por exemplo: você pode criar índices compostos
> colocando os campos utilizados na consulta com maior incidência de
> valores distintos à frente dos campos que possuem menor distinção de
> valores ao longo da tabela.
>
> Certa vez alguém postou aqui na lista um endereço de blog ou site com
> dicas valiosas de como criar índices, se você pesquisar bem no
> histórico [1] vai encontrar.
>
> [1] https://www.postgresql.org.br/historico
>
>
> TIAGO J. ADAMI
> http://www.adamiworks.com
> @tiadami
> 

Ola Tiago, obrigado pela explicação.

Att.:
Jean Alysson
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Dúvida em select

2016-05-04 Por tôpico Jean Alysson
Ola Tiago, está correta sua dedução
obrigado pela resposta !

Estou começando com PostgreSql, então gostaria de saber se dessa forma eu
teria boa performance ?
Esta solução com subselect poderia ser feita sem usar 2 selects  ? over
partition, with query ou algo assim ?

Obrigado pela colaboração
Jean Alysson

Em 4 de maio de 2016 22:25, Tiago José Adami <adam...@gmail.com> escreveu:

> Em 4 de maio de 2016 22:19, Jean Alysson <jeanp...@gmail.com> escreveu:
> >
> > Ola, preciso fazer o select abaixo, tem que retornar somente um registro,
> > mas como o campoString é diferente, retornam varios registros, como
> posso resolver ?
> >
> > SELECT  max(campoInteger), campoString
> >  FROM tabela
> >  where outroCampoInteger = 31
> > group by campoInteger, campoString
> >
> > já tentei colocar max(campoString), mas não deu certo , retorna um
> registro, mas misturou o campoInteger de um registro com o campoString de
> outro registro
>
> Deduzi que você quer os dois campos para o valor máximo de
> campoInteger, certo? Veja se isso te ajuda:
>
> SELECT
> t1.campoInteger, t1.campoString
> FROM
> tabela t1
> WHERE
> t1.outroCampoInteger = 31 AND
> t1.campoInteger = (
> SELECT
> MAX(t2.campoInteger)
> FROM
> tabela t2
> WHERE
> t2.outroCampoInteger = t1.outroCampoInteger
> )
>
> TIAGO J. ADAMI
> http://www.adamiworks.com
> @tiadami
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Atenciosamente
Jean Alysson Ambrosio
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

[pgbr-geral] Dúvida em select

2016-05-04 Por tôpico Jean Alysson
Ola, preciso fazer o select abaixo, tem que retornar somente um registro,
mas como o campoString é diferente, retornam varios registros, como posso
resolver ?
SELECT  max(campoInteger), campoString
 FROM tabela
 where outroCampoInteger = 31
group by campoInteger, campoString

já tentei colocar max(campoString), mas não deu certo , retorna um
registro, mas misturou o campoInteger de um registro com o campoString de
outro registro

Obrigado
Jean Alysson
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral