202 votes

Compter les valeurs nulles et non nulles dans une seule requête

J'ai une table

create table us
(
 a number
);

Maintenant, j'ai des données comme :

a
1
2
3
4
null
null
null
8
9

Maintenant, j'ai besoin d'une seule requête pour compter les nullités. y valeurs non nulles dans la colonne a

301voto

Cela fonctionne pour Oracle et SQL Server (vous pourrez peut-être le faire fonctionner sur un autre SGBDR) :

select sum(case when a is null then 1 else 0 end) count_nulls
     , count(a) count_not_nulls 
  from us;

Ou :

select count(*) - count(a), count(a) from us;

80voto

Alberto Zaccagni Points 11478

Si j'ai bien compris, vous voulez compter tous les NULL et tous les NOT NULL dans une colonne...

Si c'est correct :

SELECT count(*) FROM us WHERE a IS NULL 
UNION ALL
SELECT count(*) FROM us WHERE a IS NOT NULL

Modifié pour avoir la requête complète, après avoir lu les commentaires :]


SELECT COUNT(*), 'null_tally' AS narrative 
  FROM us 
 WHERE a IS NULL 
UNION
SELECT COUNT(*), 'not_null_tally' AS narrative 
  FROM us 
 WHERE a IS NOT NULL;

53voto

christopheml Points 1880

Voici une version rapide et sale qui fonctionne sur Oracle :

select sum(case a when null then 1 else 0) "Null values",
       sum(case a when null then 0 else 1) "Non-null values"
from us

32voto

EvilTeach Points 12235

Pour les non-nuls

select count(a)
from us

pour les nuls

select count(*)
from us

minus 

select count(a)
from us

Par conséquent,

SELECT COUNT(A) NOT_NULLS
FROM US

UNION

SELECT COUNT(*) - COUNT(A) NULLS
FROM US

devrait faire l'affaire

C'est mieux dans la mesure où les titres des colonnes sont corrects.

SELECT COUNT(A) NOT_NULL, COUNT(*) - COUNT(A) NULLS
FROM US

Lors de certains tests sur mon système, cela coûte un balayage complet de la table.

27voto

Ariful Haque Points 563

Comme j'ai compris votre requête, il suffit d'exécuter ce script et d'obtenir Total Null, Total NotNull lignes,

select count(*) - count(a) as 'Null', count(a) as 'Not Null' from us;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X