Page 1 sur 1

Requete compliquée (pour moi)

Posté : 11 juil. 2005, 22:08
par Paul59
Bonjour.


(Suis sous SQL & PHP)

Je souhaite réaliser une requete qui me permette de calculer le nombre de champs vides ou null par enregistrement

(je souhaite calculer un coefficient de "pertinence" de ma base)


D'avance Merci

Re: Requete compliquée (pour moi)

Posté : 11 juil. 2005, 22:41
par ouckileou
(Suis sous SQL & PHP)
SQL est un langage, pas un SGBD
tu peux être "sous" MySQL, Oracle, postgres...
Je souhaite réaliser une requete qui me permette de calculer le nombre de champs vides ou null par enregistrement

(je souhaite calculer un coefficient de "pertinence" de ma base)
je me permet de demander une précision sur ce que tu veux faire exactement :

pour une colonne, compter le nombre de valeur nulle dans ta table
ou pour une ligne (un enregistrement) compterle nombre de colonnes nulles ?

Posté : 12 juil. 2005, 19:32
par Paul59
Je souhaite compter le nombre de champs vides par enregistrements

Posté : 12 juil. 2005, 20:08
par Cyrano
Ça va être difficile de simplement faire un count(). à première vue, tu vas devoir faire un count sur les colonnes avec des clauses WHERE pour chaque colonne...

Ceci dit, ça veut aussi dire que ta base est mal conçue. Quand on conçoit une base de données, on fait en sorte pour l'efficacité du système de limiter au maximum les possibilités de champs contenant des valeurs NULL

Donc il faudra peut-être bien revoir la structure générale de la base pour séparer tes tables en différentes entités distinctes.

Posté : 13 juil. 2005, 17:01
par Paul59
Ben pour les champs nulls de ma base, il fo connaitre le contexte

je fais un annuaire en ligne et je voudrais afficher en temps réel ce que j'appelle le "coefficient de pertinence" de la base
c'est à dire le nombre de champs vides par rapport aux nombre de champs contenants une valeur si tous les membres de l'annaire étaient à jour

Posté : 13 juil. 2005, 22:39
par Augure
Je suppose que tu connais la liste de toutes tes colonnes

1/ Pour le taux par colonne

Code : Tout sélectionner

select ( 1-(count(*)-count(col1))/count(*) ) * 100 ) AS 'Tx_pertinence_col1' , ( 1-(count(*)-count(col2))/count(*) ) * 100 ) AS 'Tx_pertinence_col2' , ( 1-(count(*)-count(col3))/count(*) ) * 100 ) AS 'Tx_pertinence_col3' , ( 1-(count(*)-count(col4))/count(*) ) * 100 ) AS 'Tx_pertinence_col4' from MaTable


count(*) => nombre total de lignes
count(col1) => nombre total de lignes ayant une valeur différente de NULL dans la colonne col1
Donc
count(*)-count(col1) => Nombre de ligne ayant la valeur NULL dans col1
count(*)-count(col1) / count(*) => Ratio de ligne ayant la valeur NULL dans col1
Notre unvivers étant dans ce cas binaire et égale à 1
1 - ( count(*)-count(col1) / count(*) ) => ratio de ligne non NULL

Et puis *100 pour transformer Ration en %
2/ Si tu veux qu'un seul tx pour toute ta table

Code : Tout sélectionner

select ( ( 1-(count(*)-count(col1))/count(*) ) * 100 ) + ( 1-(count(*)-count(col2))/count(*) ) * 100 ) + ( 1-(count(*)-count(col3))/count(*) ) * 100 ) + ( 1-(count(*)-count(col4))/count(*) ) * 100 ) ) / 4 from MaTable