Re: [pgbr-geral] Dúvida em select
Boa noite, Em 5 de junho de 2016 20:20, Jean Alyssonescreveu: > 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
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
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é Adamiescreveu: > 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 Alyssonescreveu: > > 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
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
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 vinic...@msisolucoes.com.br: 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
Grande Jota, grandes respostas. 2009/2/27 JotaComm jota.c...@gmail.com 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 vinic...@msisolucoes.com.br: 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
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 vinic...@msisolucoes.com.br 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 rib...@gmail.com: 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 vinic...@msisolucoes.com.br 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
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 vinic...@msisolucoes.com.br 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
2009/2/26 Marcelo Costa marcelojsco...@gmail.com Fala Ribamar de volta Então, quando se precisa sempre se volta. :) 2009/2/26 Ribamar Sousa rib...@gmail.com: 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 vinic...@msisolucoes.com.br 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
2009/2/26 Marcelo Costa marcelojsco...@gmail.com: Fala Ribamar de volta 2009/2/26 Ribamar Sousa rib...@gmail.com: 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 vinic...@msisolucoes.com.br 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