Cita: si pongo sum(elemento1)>0 me da error...¿por qué?
Porque SUM() es una
función de agregación, y en todos los DBMS está estrictamente
prohibido poner funciones de agregación en el WHERE.
El WHERE es un condicionante que se evalúa
por cada uno de los registros considerado individualmente, es decir, filtra los registros que deben cumplir las condiciones indicadas. En cambio un SUM() es una función que para tener significado debe agrupar 1...N registros diferentes. Ambas cosas son funcionalmente incompatibles, ¿se entiende?
Ahora bien, si lo que deseas es que, de todos los registros que se obtienen agrupando, sólo devuelva los que cumplen con un valor de sumatoria dado, entonces debes usar HAVING
Código SQL:
Ver originalSELECT *, (SUM(elemento1)+SUM(elemento2)+SUM(elemento3)) total
FROM datos
WHERE elemento1>0 && elemento2>0 && elemento3>0
GROUP BY num
ORDER BY total
HAVING (SUM(elemento1)+SUM(elemento2)+SUM(elemento3))>0