Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fiz um select onde ele pega as quantidades de saídas e entradas e me mostra o saldo do item, funcionando direitinho.
Só que preciso que ele me mostre apenas o saldo maior que 3, como posso colocar isso no me select?
Montei assim:
SELECT cat.id, cat.nome, cat.atacado,
SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS qtd_tipo_0,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) AS qtd_tipo_1,
SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) AS qtd_tipo_2,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS Saldo
FROM lc_movimento AS mov
INNER JOIN lc_cat AS cat ON cat.id = mov.cat
GROUP BY cat.nome ASCDeu erro
SELECT cat.id, cat.nome, cat.atacado,
SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS qtd_tipo_0,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) AS qtd_tipo_1,
SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) AS qtd_tipo_2,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS Saldo
FROM lc_movimento AS mov
INNER JOIN lc_cat AS cat ON cat.id = mov.cat
WHERE Saldo > 3
GROUP BY cat.nome ASC LIMIT 0, 25
Mensagens do MySQL : Documentação
#1054 - Coluna 'Saldo' desconhecida em 'where clause'
Tenta com sub-query:
SELECT * FROM(
SELECT cat.id, cat.nome, cat.atacado,
SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS qtd_tipo_0,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) AS qtd_tipo_1,
SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) AS qtd_tipo_2,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS Saldo
FROM lc_movimento AS mov
INNER JOIN lc_cat AS cat ON cat.id = mov.cat
)T
WHERE T.SALDO > 3
GROUP BY T.nome ASC
Ou repetindo o saldo no where:
SELECT cat.id, cat.nome, cat.atacado,
SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS qtd_tipo_0,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) AS qtd_tipo_1,
SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) AS qtd_tipo_2,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS Saldo
FROM lc_movimento AS mov
INNER JOIN lc_cat AS cat ON cat.id = mov.cat
WHERE SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) > 3
GROUP BY cat.nome ASC
HAVING ...
SELECT cat.id, cat.nome, cat.atacado,
SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS qtd_tipo_0,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) AS qtd_tipo_1,
SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) AS qtd_tipo_2,
SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) AS Saldo
FROM lc_movimento AS mov
INNER JOIN lc_cat AS cat ON cat.id = mov.cat
GROUP BY cat.nome ASC
HAVING SUM( IF( mov.tipo =1, mov.qtd, 0 ) ) -
SUM( IF( mov.tipo =2, mov.qtd, 0 ) ) - SUM( IF( mov.tipo =0, mov.qtd, 0 ) ) > 3
Motta, deu certo valeu...obrigado
Vale lembrar que no HAVING você pode usar o ALIAS da coluna calculada.
Tente isso.
...
FROM lc_movimento AS mov
INNER JOIN lc_cat AS cat ON cat.id = mov.cat
WHERE saldo > 3
GROUP BY cat.nome ASC