[MYSQL5] Faire un cumul de valeur
Posté : 28 juin 2005, 15:41
Ca me cassais les pieds => je l'ai fait, une fonction qui cumule les valeurs d'un champ numérique.
Pourquoi ne pas le faire dans mon application me direz vous ??? Parceque c'est une de mes contraintes : y'a pas d'application !
pour permettre de lancer plusieurs cumuls dans une même requete, un cumul doit être nommé (on peut par exemple utiliser le nom du champ sur lequel on effectue le cumul)
Il y a deux procédures clear_all_cumul(), clear_one_cumul('nom_du_cumul') et la fonction de cumul proprement dite cumul('nom_du_cumul',valeur)
exécuter le code suivant dans le client mysql.exe (ou équivalent)
Pourquoi ne pas le faire dans mon application me direz vous ??? Parceque c'est une de mes contraintes : y'a pas d'application !
pour permettre de lancer plusieurs cumuls dans une même requete, un cumul doit être nommé (on peut par exemple utiliser le nom du champ sur lequel on effectue le cumul)
Il y a deux procédures clear_all_cumul(), clear_one_cumul('nom_du_cumul') et la fonction de cumul proprement dite cumul('nom_du_cumul',valeur)
exécuter le code suivant dans le client mysql.exe (ou équivalent)
Code : Tout sélectionner
DELIMITER $$
DROP PROCEDURE IF EXISTS `clear_all_cumul`$$
CREATE PROCEDURE `clear_all_cumul`()
drop temporary table if exists tmp_cumul_func$$
DROP PROCEDURE IF EXISTS `clear_one_cumul`$$
CREATE PROCEDURE `clear_one_cumul`(nomCpt varchar(50))
delete from tmp_cumul_func where nom=nomCpt$$
DROP FUNCTION IF EXISTS `cumul`$$
CREATE FUNCTION `cumul`(nomCpt VARCHAR(50), x REAL) RETURNS REAL
BEGIN
#variable stockant le total
DECLARE tt REAL;
#creation de la table stockant les cumuls
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_cumul_func (
nom VARCHAR(50),
total REAL NOT NULL DEFAULT 0,
PRIMARY KEY (nom)
);
#calcul du nouveau total
INSERT INTO tmp_cumul_func VALUES (nomCpt,x)
ON DUPLICATE KEY
UPDATE total=total+x ;
#recherche du total précédent
SELECT total INTO tt FROM tmp_cumul_func WHERE nom=nomCpt;
return tt;
END$$
DELIMITER ;