Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera, estou com dificuldades para executar a contagem de várias tabelas. Segue o código abaixo:
SELECT
a.id,
SUM(b.total + e.total + g.total + i.total + l.total + n.total + p.total) as todos
FROM
Caracteristica a LEFT JOIN
(SELECT c.caracteristica, COUNT(c.id) as total FROM Fmea_X_Requisitos c) b ON b.caracteristica=a.id LEFT JOIN
(SELECT d.caracteristica, COUNT(d.id) as total FROM EnsaioDesempenho_X_Caracteristicas d ) e ON e.caracteristica=a.id LEFT JOIN
(SELECT f.caracteristica, COUNT(f.id) as total FROM EnsaioDesempenho_X_Caracteristicas f ) g ON g.caracteristica=a.id LEFT JOIN
(SELECT h.caracteristica, COUNT(h.id) as total FROM EnsaioMaterial_X_Caracteristicas h ) i ON i.caracteristica=a.id LEFT JOIN
(SELECT j.caracteristica, COUNT(j.id) as total FROM FmeaPadrao_X_Requisitos j ) l ON l.caracteristica=a.id LEFT JOIN
(SELECT m.caracteristica, COUNT(m.id) as total FROM MatrizDeCaracteristicas_X_Relacoes m ) n ON n.caracteristica=a.id LEFT JOIN
(SELECT o.caracteristica, COUNT(o.id) as total FROM PlanoDeControle_X_Caracteristicas o ) p ON p.caracteristica=a.id
WHERE a.id=28
Obs: O id 28 é apenas para testar.
Esse código está retornando "null". Como posso realizar essa soma?
Abs
tem que usar o SUM em 1 por 1 e depois fazer as contas de mais
Fala Vinicius.
Ontem, eu e a equipe aqui da empresa nos reunimos e veja a solução que encontramos:
SELECT
a.id,
SUM(
if(b.total IS NULL, 0, b.total) +
if(e.total IS NULL, 0, e.total) +
if(g.total IS NULL, 0, g.total) +
if(i.total IS NULL, 0, i.total) +
if(l.total IS NULL, 0, l.total) +
if(n.total IS NULL, 0, n.total) +
if(p.total IS NULL, 0, p.total)
) as total
FROM
Caracteristica a LEFT JOIN
(SELECT c.caracteristica, COUNT(c.id) as total FROM Fmea_X_Requisitos c GROUP BY c.caracteristica) b ON b.caracteristica=a.id LEFT JOIN
(SELECT d.caracteristica, COUNT(d.id) as total FROM EnsaioDesempenho_X_Caracteristicas d GROUP BY d.caracteristica) e ON e.caracteristica=a.id LEFT JOIN
(SELECT f.caracteristica, COUNT(f.id) as total FROM EnsaioDesempenho_X_Caracteristicas f GROUP BY f.caracteristica) g ON g.caracteristica=a.id LEFT JOIN
(SELECT h.caracteristica, COUNT(h.id) as total FROM EnsaioMaterial_X_Caracteristicas h GROUP BY h.caracteristica) i ON i.caracteristica=a.id LEFT JOIN
(SELECT j.caracteristica, COUNT(j.id) as total FROM FmeaPadrao_X_Requisitos j GROUP BY j.caracteristica) l ON l.caracteristica=a.id LEFT JOIN
(SELECT m.caracteristica, COUNT(m.id) as total FROM MatrizDeCaracteristicas_X_Relacoes m GROUP BY m.caracteristica) n ON n.caracteristica=a.id LEFT JOIN
(SELECT o.caracteristica, COUNT(o.id) as total FROM PlanoDeControle_X_Caracteristicas o GROUP BY o.caracteristica) p ON p.caracteristica=a.id
WHERE a.id=62
Transformamos os "null" em "0" e então fiz a soma. Dessa maneira, os resultados que voltam como "null" podem ser tratados em uma função PHP qualquer.
Obrigado pela ajuda!
Você pode usar a função coalesce também ao invés de if, é uma função específica para isso.
Você pode usar a função coalesce também ao invés de if, é uma função específica para isso.
E no caso apresentado acima, como eu deveria utilizar essa função?
if(b.total IS NULL, 0, b.total) +
por
coalesce(b.total, 0) +
tem que usar o SUM em 1 por 1 e depois fazer as contas de mais