montano 0 Denunciar post Postado Novembro 9, 2009 Bom dia, preciso fazer dois count em uma tabela com where distintos, quero usar um union para juntas os dois resultados SELECT COUNT( cod ) AS ativadas FROM contrato_pme WHERE situacao IN ( SELECT cod FROM situacoes WHERE representacao = '1' ) UNION SELECT COUNT( cod ) AS cumpridas FROM contrato_pme WHERE situacao IN ( SELECT cod FROM situacoes WHERE representacao = '1' ) AND data_agendamento >= data_situacao Porem ele me gera uma coluna 'Ativadas' com duas linhas uma representado 'ativadas' e a outra 'cumpridas' , Porque ele nao me cria a coluna 'cumpridas'? sei que para fazer union os campos selecionados tem que serem os mesmos, mas para o count tambem funciona assim? Teria como eu criar essa 2ª coluna no union? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Novembro 9, 2009 Via de regra, o comportamento do UNION terá esse mesmo resultado, veja bem o que você fez e qual foi o resultado: mysql> use um Database changed mysql> create table t1(id int, ativada int, cumprida int); Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (1,1,0), (2,1,0), (3,0,0); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from t1; +------+---------+----------+ | id | ativada | cumprida | +------+---------+----------+ | 1 | 1 | 0 | | 2 | 1 | 0 | | 3 | 0 | 0 | +------+---------+----------+ 3 rows in set (0.00 sec) mysql> select count(id) from t1 where ativada = 1 -> union -> select count(id) from t1 where cumprida = 1; +-----------+ | count(id) | +-----------+ | 2 | | 0 | +-----------+ 2 rows in set (0.08 sec) No resultado acima, ele exibiu a contage dos resultado de ativadas e cumpridas em uma mesma coluna. Isso é como funciona o UNION. Agora, se você quer uma consulta que lhe traga duas colunas, uma ativada e outra cumprida, contendo como valor a contagem de um e de outro, faça uma consulta chamada REFRÊNCIA CRUZADA, assim: mysql> SELECT -> (SELECT COUNT(id) FROM t1 WHERE ativada = 1) AS ATIVADA, -> (SELECT COUNT(id) FROM t1 WHERE cumprida = 1) AS CUMPRIDA -> FROM t1 LIMIT 1; +---------+----------+ | ATIVADA | CUMPRIDA | +---------+----------+ | 2 | 0 | +---------+----------+ 1 row in set (0.00 sec) Espero ter lhe ajudado, Happy MySQL'ing! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
montano 0 Denunciar post Postado Novembro 10, 2009 Ajudo muito, Seria um dois selects dentro de 1 e eu renomeio eles como se fossem uma nova coluna. Obrigado pela ajuda Wagner. Compartilhar este post Link para o post Compartilhar em outros sites