Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rmini83

[Resolvido] Consulta interessante em SQL

Recommended Posts

Pretendo fazer uma consulta em SQL que retorne dois valores, os positivos e os negativos, tudo feito só numa consulta, sem fazer em duas consultas, alguém me ajuda com a lógica disto.

 

Agradeço desde já a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você postar a estrutura da tabela, ajuda para entendermos oque você está falando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, como assim, positivo e negativo???

 

Você falando somente isso, a primeira coisa que imaginei foi q você queria trazer tanto o valor "2" quanto o "-2" .. do mesmo campo...

 

Se for assim, eu faria algo como:

SELECT num1, num1*-1 as num1_neg, num2, num2*-1 as num2_neg, num3, num3*-1 as num3_neg FROM minha_tabela;

Compartilhar este post


Link para o post
Compartilhar em outros sites

SQL Server ou Mysql?

 

Carlos Eduardo

 

Mysql, desculpa pela forma que coloquei minha questão, explico mais detalhado.

Tenho uma tabela PRODUTO que tem um campo QUANTIDADE, quero trazer em uma consulta só os produtos que tem quantidade positiva e os produtos que estão zerados ou com quantidade negativa.

Acho que agora fico compreensível.

 

Agradeço amigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que agora fico compreensível.

 

Na verdade não,

 

Tenho uma tabela PRODUTO que tem um campo QUANTIDADE, quero trazer em uma consulta só os produtos que tem quantidade positiva e os produtos que estão zerados ou com quantidade negativa.

 

A não ser que eu esteja perdendo alguma coisa, só existem essas 3 possibilidades: menor que 0, 0 e maior que 0.

Quando você diz querer uma consulta que traz apenas essas 3 possibilidades você está dizendo que quer todas as possibilidades:

 

SELECT * FROM PRODUTOS

Compartilhar este post


Link para o post
Compartilhar em outros sites

A não ser que eu esteja perdendo alguma coisa, só existem essas 3 possibilidades: menor que 0, 0 e maior que 0.

Quando você diz querer uma consulta que traz apenas essas 3 possibilidades você está dizendo que quer todas as possibilidades:

 

SELECT * FROM PRODUTOS

 

Sim, é isto, no fim eu vou trazer todos os produtos, mas a minha dúvida é como contar, isto o que eu preciso, contar os elementos negativos e positivos, do campo QUANTIDADE da minha tabela PRODUTO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja só:

 

mysql> select * from produtos;
+----+------------+
| id | quantidade |
+----+------------+
| 1 | 10 |
| 2 | 1 |
| 3 | -5 |
| 4 | 0 |
| 5 | -2 |
| 6 | 0 |
+----+------------+
6 rows in set (0.00 sec)

Temos 2 produtos que têm quantidade negativa (3,5), dois zerados (4,6) e dois com quantidade positiva (1,2).

 

Para separá-los:

mysql> select
 -> if ( quantidade = 0 , 1 , 0 ) 'zerado',
 -> if ( quantidade > 0 , 1 , 0 ) 'positivo',
 -> if ( quantidade < 0 , 1 , 0 ) 'negativo'
 -> from produtos;
+--------+----------+----------+
| zerado | positivo | negativo |
+--------+----------+----------+
| 0 | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 1 | 0 |
+--------+----------+----------+
6 rows in set (0.00 sec)

Criando uma view com esses dados para facilitar:

mysql> create or replace view quantidades as
 -> select
 -> if ( quantidade = 0 , 1 , 0 ) 'zerado',
 -> if ( quantidade > 0 , 1 , 0 ) 'positivo',
 -> if ( quantidade < 0 , 1 , 0 ) 'negativo'
 -> from produtos;
Query OK, 0 rows affected (0.00 sec)

Com a view basta fazer a consulta como se fosse uma tabela:

mysql> select * from quantidades;
+--------+----------+----------+
| zerado | positivo | negativo |
+--------+----------+----------+
| 0 | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 1 | 0 |
+--------+----------+----------+
6 rows in set (0.00 sec)

Agora contando:

mysql> select
 -> sum(negativo) 'negativos',
 -> sum(zerado) 'zerados',
 -> sum(positivo) 'positivos'
 -> from quantidades;
+-----------+---------+-----------+
| negativos | zerados | positivos |
+-----------+---------+-----------+
| 2 | 2 | 2 |
+-----------+---------+-----------+
1 row in set (0.00 sec)

É isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado, funcionou 100%, muito legal esse recurso IF não conhecia, só para concluir, seria possível explicar mais detalhado os parámetros do IF, isto não compreendi muito bem, obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria possível explicar mais detalhado os parámetros do IF, isto não compreendi muito bem, obrigado!

 

O IF funciona igual ao do PHP:

 

if ( condicao , instrucao se verdadeiro , instrucao se falso );

 

mysql> select if( 1=1 , 'Verdadeiro' , 'Falso' );
+------------------------------------+
| if( 1=1 , 'Verdadeiro' , 'Falso' ) |
+------------------------------------+
| Verdadeiro |
+------------------------------------+
1 row in set (0.00 sec)

mysql> select if( 1=2 , 'Verdadeiro' , 'Falso' );
+------------------------------------+
| if( 1=2 , 'Verdadeiro' , 'Falso' ) |
+------------------------------------+
| Falso |
+------------------------------------+
1 row in set (0.00 sec)

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.