Page 1 sur 1

Calcul pourcentage colonnes vides

Posté : 31 juil. 2017, 17:22
par cris84
Bonjour à tous,
je voudrais calculer le pourcentage de remplissage d'une ligne de ma table.
Il y a dans ma table 11 données qui sont facultatives sur les 35 que contient la table.
id, nom, email etc...jusqu'à 35
Comment je peux calculer en pourcentage en fonction des "champs" vides et ceux qui ne le sont pas :?:

J'utilise mysqli pour ma connexion :
$sql=mysqli_query($bdd, "SELECT * FROM ma_table WHERE url='".$_SESSION['url']."'")or die(mysqli_error($bdd));
$a=mysqli_fetch_assoc($sql);

Merci de votre aide

Re: Calcul pourcentage colonnes vides

Posté : 01 août 2017, 11:06
par @rthur
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 :
:arrow: 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

Re: Calcul pourcentage colonnes vides

Posté : 01 août 2017, 15:22
par cris84
Bonjour,
super génial, je ne connaissais pas ! :)
Un grand merci pour cette explication au combien détaillée.
Là on sait se que l'on fait =D>