Mysql SOMME avec instruction de cas
SELECT
SUM(
CASE
WHEN cumulative = 1
THEN percent
ELSE 0
END)
FROM phppos_items_taxes;
Compte tenu de la déclaration ci-dessus ne ce ne la suivante:
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 |
+---------+-----------+---------+------------+
Cette SOMME pour cent pour chaque ligne que l'effet cumulatif = 1. Si cumulatifs != 1 alors 0 est résumée.
OriginalL'auteur Chris Muench | 2011-07-29
Vous devez vous connecter pour publier un commentaire.
Oui, c'est fait!
Plus courte et la plus propre de la requête (à mon humble avis) serait d'utiliser
IF
déclaration:+1. J'utilise cette syntaxe trop avec mysql, mais autant que je sache "somme(cas où ..." est un standard de la solution. edit. Quand j'arrive à la fin de mon post, j'ai vu le projet de Loi de réponse. 🙂
Oui, vous avez raison. Je suis totalement d'accord avec vous. Cependant, il y a beaucoup de choses dans MySQL, qui ne sont pas la norme ANSI SQL, cela ne fera pas de code SQL écrit pour MySQL qui portable par défaut. Les Chances sont quand portabilité vient à remettre en question toutes les requêtes seront inspectés, mais c'est super ce que vous avez fait, merci. 🙂
Oui, je suis d'accord portabilité est insaisissable, et pas toujours la peine.
OriginalL'auteur Shef
Pourquoi ne pas simplement de filtrer les éléments?
Dans votre cas, chaque ligne sera sélectionnée et
CASE
déclaration doit être appliquée, je crois qu'avecWHERE
filtre, il serait beaucoup plus vite, parce que OÙ la clause d'exécution avant la clause SELECTOriginalL'auteur sll