Re: [pgbr-geral] Dúvida em select
Boa noite, Em 5 de junho de 2016 20:20, Jean Alysson escreveu: > 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 > Se fizer assim não funciona: select sum(quantidade) from tabela where situacao='F' and not exists(select 1 from tabela t2 where t2.idpedido=tabela.idpedido and t2.idproduto=tabela.idproduto and t2.situacao in ('C', 'E')) Uma outra ideia seria somar as quantidades de acordo com a situação e utilizar como um subselect. -- Marcos Thomaz da Silva Analista de Tecnologia da Informação ___ 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
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
Em 05/05/2016 11:09, "Tiago José Adami" escreveu: > > Em 4 de maio de 2016 23:10, Jean Alysson 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
Em 4 de maio de 2016 23:10, Jean Alysson 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 ___ 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
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 escreveu: > Em 4 de maio de 2016 22:19, Jean Alysson 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
Re: [pgbr-geral] Dúvida em select
Em 4 de maio de 2016 22:19, Jean Alysson 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
[pgbr-geral] Dúvida em select
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
Re: [pgbr-geral] dúvida em select
Grande Jota, grandes respostas. 2009/2/27 JotaComm > Olá, Vinicius > > Acho que a consulta abaixo resolve o seu problema: > > SELECT tab_pk.relname AS "tab PK",tab_fk.relname AS "tab_FK" > FROM pg_class tab_pk JOIN pg_constraint ON > tab_pk.oid=pg_constraint.confrelid > JOIN pg_class tab_fk ON pg_constraint.conrelid=tab_fk.oid; > Mais elegante que minha resposta. Só para tentar melhorar minha imagem, adicionar a entrada para a tabela 'produtos' : SELECT tab_pk.relname AS "tab PK",tab_fk.relname AS "tab_FK" FROM pg_class tab_pk JOIN pg_constraint ON tab_pk.oid=pg_constraint.confrelid JOIN pg_class tab_fk ON pg_constraint.conrelid=tab_fk.oid and tab_fk.relname='produtos'; Ambas já foram para o novo site: postgresql.ribafs.org, seção Linguagem SQL - Dicas sobre o Catálogo do Sistema. > []s > > 2009/2/26 Vinicius A. Santos : > > Boa noite pessoal > > > > Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as > > tabelas que são ligadas à ela, por chave estrangeira. > > > > por exemplo > > select > > tabela_fk > > from > > pg_depend > > where > > tabela = 'produtos'; > > > > tabela_fk > > - > > unidades > > marcas > > etc.. > > etc.. > > etc.. > > > > -- > > Vinicius A. Santos > > www.msisolucoes.com.br > > > > ___ > > pgbr-geral mailing list > > pgbr-geral@listas.postgresql.org.br > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > > > -- > Jota > jotacomm.wordpress.com > dextra.com/postgres > PostgreSQL > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Que tal cultivar colaboração ao invés de competição? Ribamar FS - rib...@ribafs.org http://ribafs.org ___ 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
Olá, Vinicius Acho que a consulta abaixo resolve o seu problema: SELECT tab_pk.relname AS "tab PK",tab_fk.relname AS "tab_FK" FROM pg_class tab_pk JOIN pg_constraint ON tab_pk.oid=pg_constraint.confrelid JOIN pg_class tab_fk ON pg_constraint.conrelid=tab_fk.oid; []s 2009/2/26 Vinicius A. Santos : > Boa noite pessoal > > Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as > tabelas que são ligadas à ela, por chave estrangeira. > > por exemplo > select > tabela_fk > from > pg_depend > where > tabela = 'produtos'; > > tabela_fk > - > unidades > marcas > etc.. > etc.. > etc.. > > -- > Vinicius A. Santos > www.msisolucoes.com.br > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Jota jotacomm.wordpress.com dextra.com/postgres PostgreSQL ___ 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
> SELECT (select relname from pg_class where relfilenode=confrelid) as > tabela_fk > FROM pg_constraint , pg_class > WHERE pg_constraint.conrelid = pg_class.relfilenode >AND pg_class.relname = 'produtos' and pg_constraint.contype='f'; > > Teste e diz no que deu, ok? Cara, matou a pau !! Era isso mesmo... eu apenas coloquei um DISTINCT, pra ficar 100% Muito Obrigado !! -- Vinicius A. Santos www.msisolucoes.com.br ___ 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
2009/2/26 Marcelo Costa : > Fala Ribamar de volta > > 2009/2/26 Ribamar Sousa : >> Ganhando tempo: >> >> Entre com o OID da tabela produtos: >> >> select p.confrelid from pg_class c, pg_constraint p where c.relfilenode = >> '20267' >> and p.conrelid='20267' and p.confrelid >0 > > Se ele criou a tabela com a opção sem OID isso não funcionará. Creio que as tabelas do catálogo sempre tem OID. As tabelas criadas pelos usuários é que normalmente não tem OID. > > >> >> Isso retorna os OIDs das relacionadas. >> Agora é contigo ou com outro colega, para entrar nome e trazer os nomes. >> >> 2009/2/26 Vinicius A. Santos >>> >>> Boa noite pessoal >>> >>> Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as >>> tabelas que são ligadas à ela, por chave estrangeira. >>> >>> por exemplo >>> select >>> tabela_fk >>> from >>> pg_depend >>> where >>> tabela = 'produtos'; >>> >>> tabela_fk >>> - >>> unidades >>> marcas >>> etc.. >>> etc.. >>> etc.. > > Mágica não dá para fazer, passa pelo menos a estrutura de suas tabelas > para que possamos te ajudar. Você tem pelo menos o modelo do banco ? > "OIDs are not added to user-created tables, unless WITH OIDS is specified when the table is created, or the default_with_oids configuration variable is enabled." http://www.postgresql.org/docs/current/interactive/datatype-oid.html Osvaldo ___ 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
2009/2/26 Marcelo Costa > Fala Ribamar de volta Então, quando se precisa sempre se volta. :) > > > 2009/2/26 Ribamar Sousa : > > Ganhando tempo: > > > > Entre com o OID da tabela produtos: > > > > select p.confrelid from pg_class c, pg_constraint p where c.relfilenode = > > '20267' > > and p.conrelid='20267' and p.confrelid >0 > > Se ele criou a tabela com a opção sem OID isso não funcionará. > > Esqueci que estava com o PGAdmin na minha frente, e mas veja a minha proxima mensagem. > > > > > Isso retorna os OIDs das relacionadas. > > Agora é contigo ou com outro colega, para entrar nome e trazer os nomes. > > > > 2009/2/26 Vinicius A. Santos > >> > >> Boa noite pessoal > >> > >> Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as > >> tabelas que são ligadas à ela, por chave estrangeira. > >> > >> por exemplo > >> select > >> tabela_fk > >> from > >> pg_depend > >> where > >> tabela = 'produtos'; > >> > >> tabela_fk > >> - > >> unidades > >> marcas > >> etc.. > >> etc.. > >> etc.. > > Mágica não dá para fazer, Quem disse? O Mister M tá tornando ela também open source. :) > passa pelo menos a estrutura de suas tabelas > para que possamos te ajudar. Você tem pelo menos o modelo do banco ? > > -- > Marcelo Costa > www.marcelocosta.net > - > “Os muito poderosos e os muito estúpidos possuem uma coisa em comum. > Ao invés de alterarem as suas visões para se ajustarem aos fatos do > mundo, eles alteram os fatos para ajustá-los às suas visões.”, > > Doctor Who. > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Que tal cultivar colaboração ao invés de competição? Ribamar FS - rib...@ribafs.org http://ribafs.org ___ 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
Acho que agora vai: SELECT (select relname from pg_class where relfilenode=confrelid) as tabela_fk FROM pg_constraint , pg_class WHERE pg_constraint.conrelid = pg_class.relfilenode AND pg_class.relname = 'produtos' and pg_constraint.contype='f'; Teste e diz no que deu, ok? 2009/2/26 Vinicius A. Santos > Boa noite pessoal > > Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as > tabelas que são ligadas à ela, por chave estrangeira. > > por exemplo > select > tabela_fk > from > pg_depend > where > tabela = 'produtos'; > > tabela_fk > - > unidades > marcas > etc.. > etc.. > etc.. > > -- > Vinicius A. Santos > www.msisolucoes.com.br > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Que tal cultivar colaboração ao invés de competição? Ribamar FS - rib...@ribafs.org http://ribafs.org ___ 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
Fala Ribamar de volta 2009/2/26 Ribamar Sousa : > Ganhando tempo: > > Entre com o OID da tabela produtos: > > select p.confrelid from pg_class c, pg_constraint p where c.relfilenode = > '20267' > and p.conrelid='20267' and p.confrelid >0 Se ele criou a tabela com a opção sem OID isso não funcionará. > > Isso retorna os OIDs das relacionadas. > Agora é contigo ou com outro colega, para entrar nome e trazer os nomes. > > 2009/2/26 Vinicius A. Santos >> >> Boa noite pessoal >> >> Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as >> tabelas que são ligadas à ela, por chave estrangeira. >> >> por exemplo >> select >> tabela_fk >> from >> pg_depend >> where >> tabela = 'produtos'; >> >> tabela_fk >> - >> unidades >> marcas >> etc.. >> etc.. >> etc.. Mágica não dá para fazer, passa pelo menos a estrutura de suas tabelas para que possamos te ajudar. Você tem pelo menos o modelo do banco ? -- Marcelo Costa www.marcelocosta.net - “Os muito poderosos e os muito estúpidos possuem uma coisa em comum. Ao invés de alterarem as suas visões para se ajustarem aos fatos do mundo, eles alteram os fatos para ajustá-los às suas visões.”, Doctor Who. ___ 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
Ganhando tempo: Entre com o OID da tabela produtos: select p.confrelid from pg_class c, pg_constraint p where c.relfilenode = '20267' and p.conrelid='20267' and p.confrelid >0 Isso retorna os OIDs das relacionadas. Agora é contigo ou com outro colega, para entrar nome e trazer os nomes. 2009/2/26 Vinicius A. Santos > Boa noite pessoal > > Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as > tabelas que são ligadas à ela, por chave estrangeira. > > por exemplo > select > tabela_fk > from > pg_depend > where > tabela = 'produtos'; > > tabela_fk > - > unidades > marcas > etc.. > etc.. > etc.. > > -- > Vinicius A. Santos > www.msisolucoes.com.br > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > -- Que tal cultivar colaboração ao invés de competição? Ribamar FS - rib...@ribafs.org http://ribafs.org ___ 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
Boa noite pessoal Alguém sabe me dizer um select onde passo o nome da tabela e ele traz as tabelas que são ligadas à ela, por chave estrangeira. por exemplo select tabela_fk from pg_depend where tabela = 'produtos'; tabela_fk - unidades marcas etc.. etc.. etc.. -- Vinicius A. Santos www.msisolucoes.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral