par
@rthur » 01 août 2017, 11:06
Bonjour,
Voici un exemple fonctionnel sur 4 champs :
SELECT id, prenom, nom,
ROUND(100-(ISNULL(NULLIF(prenom,'')) + ISNULL(NULLIF(nom,'')) + ISNULL(NULLIF(email,'')) + ISNULL(NULLIF(pays,'')))*100/4) AS taux_de_completion
FROM `ma_table` WHERE 1
Le schéma+données de la table de test :
CREATE TABLE IF NOT EXISTS ma_table (
id int(11) NOT NULL AUTO_INCREMENT,
prenom varchar(50) DEFAULT NULL,
nom varchar(50) DEFAULT NULL,
email varchar(50) DEFAULT NULL,
pays varchar(50) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO ma_table VALUES(1, 'Peter', 'Johnson', '', 'Etats-Unis');
INSERT INTO ma_table VALUES(2, 'Pierre', 'Dupont', '[email protected]', 'France');
INSERT INTO ma_table VALUES(3, 'Robert', 'Leman', '', NULL);
INSERT INTO ma_table VALUES(4, 'Elizabeth', 'Deux', '[email protected]', '');
INSERT INTO ma_table VALUES(5, 'Hans', 'Grum', '[email protected]', '');
Voici la formule que j'ai mise en place qui calcule de le taux de complétion :
ROUND(100-(ISNULL(NULLIF(prenom,'')) + ISNULL(NULLIF(nom,'')) + ISNULL(NULLIF(email,'')) + ISNULL(NULLIF(pays,'')))*100/4) AS taux_de_completion
Le principe est de calculer le nombre de champs vides pour chaque ligne, et de faire un calcul de pourcentage ensuite.
-
" ROUND() " : c'est pour faire un arrondi pour ne pas avoir de chiffres derrière la virgule.
-
" 100- " : C'est pour avoir le taux de complétion, car sans cela on aurait le taux de champs vides
-
" ISNULL(NULLIF(prenom,'')) " : Là c'est le côté un peu tricky de la formule, c'est ce qui permet de retourner 1 si le champ est vide ou null
-
" *100/4 " : C'est pour calculer le pourcentage, 4 ici correspond au nombre de champs sur lequel je fais le test 4 dans mon cas, 35 dans le tien
-
" AS taux_de_completion " : C'est pour donner un nom + explicite au champ de résultat que tu vas récupérer
Bonjour,
Voici un exemple fonctionnel sur 4 champs :
[sql]SELECT id, prenom, nom,
ROUND(100-(ISNULL(NULLIF(prenom,'')) + ISNULL(NULLIF(nom,'')) + ISNULL(NULLIF(email,'')) + ISNULL(NULLIF(pays,'')))*100/4) AS taux_de_completion
FROM `ma_table` WHERE 1[/sql]
Le schéma+données de la table de test : [sql]
CREATE TABLE IF NOT EXISTS ma_table (
id int(11) NOT NULL AUTO_INCREMENT,
prenom varchar(50) DEFAULT NULL,
nom varchar(50) DEFAULT NULL,
email varchar(50) DEFAULT NULL,
pays varchar(50) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO ma_table VALUES(1, 'Peter', 'Johnson', '', 'Etats-Unis');
INSERT INTO ma_table VALUES(2, 'Pierre', 'Dupont', '
[email protected]', 'France');
INSERT INTO ma_table VALUES(3, 'Robert', 'Leman', '', NULL);
INSERT INTO ma_table VALUES(4, 'Elizabeth', 'Deux', '
[email protected]', '');
INSERT INTO ma_table VALUES(5, 'Hans', 'Grum', '
[email protected]', '');[/sql]
Voici la formule que j'ai mise en place qui calcule de le taux de complétion :
:arrow: [b]ROUND(100-(ISNULL(NULLIF(prenom,'')) + ISNULL(NULLIF(nom,'')) + ISNULL(NULLIF(email,'')) + ISNULL(NULLIF(pays,'')))*100/4) AS taux_de_completion[/b]
Le principe est de calculer le nombre de champs vides pour chaque ligne, et de faire un calcul de pourcentage ensuite.
- [b]" ROUND() "[/b] : c'est pour faire un arrondi pour ne pas avoir de chiffres derrière la virgule.
- [b]" 100- "[/b] : C'est pour avoir le taux de complétion, car sans cela on aurait le taux de champs vides
- [b]" ISNULL(NULLIF(prenom,'')) "[/b] : Là c'est le côté un peu tricky de la formule, c'est ce qui permet de retourner 1 si le champ est vide ou null
- [b]" *100/4 "[/b] : C'est pour calculer le pourcentage, 4 ici correspond au nombre de champs sur lequel je fais le test 4 dans mon cas, 35 dans le tien
- [b]" AS taux_de_completion "[/b] : C'est pour donner un nom + explicite au champ de résultat que tu vas récupérer