SELECT
SUM(
CASE
WHEN cumulative = 1
THEN percent
ELSE 0
END)
FROM phppos_items_taxes;
Teniendo en cuenta la declaración anterior hace este el siguiente:Mysql SUM con declaración de caso
mysql> select * FROM phppos_items_taxes;
+---------+-----------+---------+------------+
| item_id | name | percent | cumulative |
+---------+-----------+---------+------------+
| 1 | Tax 1 | 8.00 | 0 |
| 1 | Tax 2 | 10.00 | 1 |
| 3 | Sales Tax | 8.00 | 0 |
| 4 | Tax 1 | 20.00 | 0 |
| 4 | Tax 2 | 20.00 | 0 |
+---------+-----------+---------+------------+
hace esto resumir por ciento para cada fila que acumulado = 1. Si acumulado = 1, entonces se resume 0! .
Shorter, sí, pero la sintaxis IF() no es ANSI SQL. Usar CASE aumenta la posibilidad de ser portátil, por lo que eso vale. –
+1. También utilizo esta sintaxis con mysql pero AFAIK "sum (case when ..." es una solución más estándar. Edit. Cuando termino mi publicación, he visto la respuesta de Bill. :) –
@ Bill: Sí, tienes razón. Estoy totalmente de acuerdo contigo. Sin embargo, hay tantas cosas en MySQL, que no son ANSI SQL, que no harán que el código SQL escrito para MySQL sea portátil de manera predeterminada. Lo más probable es que cuando la portabilidad llegue a cuestionar todas las consultas serán inspeccionadas, pero es genial que lo haya sacado a relucir, gracias. :) – Shef