10
votes

Comment puis-je compter uniquement les valeurs nulles dans Oracle / Plsql?

Comment puis-je compter uniquement les valeurs nulles dans Oracle / Plsql?

Je veux compter uniquement les valeurs nulelles. Y a-t-il une fonction qui fait ça?


0 commentaires

8 Réponses :


19
votes

Je ne connais pas l'oracle spécifiquement, mais ANSI SQL, Count (Nom (ROWNED) CODE> NE compte pas NULL code> valeurs, mais compte (*) code > Est-ce que ça fait. Donc, vous pouvez écrire

SELECT COUNT(*) FROM YourTable WHERE YourColumn IS NULL


1 commentaires

Dans ma base de données Oracle, cela ne fonctionne pas. Un compte résultats en 0, car NULL ne peut pas être compté. Nous utilisons une coalesse pour résoudre ce problème.



7
votes

L'oracle Documentation déclare que:

toutes les fonctions globales sauf Compter (*) et grouper ignorer les nulls. Vous pouvez utiliser la fonction NVL dans le argument à une fonction agrégée à substituer une valeur pour un null.

Par exemple, à l'aide du schéma Scott: xxx

Vous pouvez voir que la colonne COMM a 4 valeurs connues (c.-à-d. NON NULL) et 10 INCONNUS Valeurs (c.-à-d. NULL)

comme comptez (votre_column_name) ignore les nulls, vous devez substituer les valeurs inconnues pour quelque chose que vous pouvez faire référence à. Ceci peut être réalisé en utilisant le NVL fonction . xxx

J'ai utilisé la valeur "-1" comme "alias" pour mes valeurs null parce que je sais que "-1" n'est pas une valeur existante dans la commo colonne.

EDIT:

Suivez la suggestion de Rob. Il est possible de supprimer la clause WHERE de l'exemple ci-dessus et d'utiliser le NVL2 fonction comme indiqué ci-dessous: xxx


2 commentaires

ou simplement, sans une clause WHERE: SELECT Compte (NVL2 (COMM, NULL, 1)) de EMP


Merci rob - je ne le savais pas. Va ajouter à ma réponse. Merci encore



11
votes

comme alternative à la réponse de la MDMA. Si vous ne voulez pas mettre un filtre dans l'endroit où vous pouvez

SELECT COUNT(case when xxx IS NULL THEN 1 end) cnt_xxx_null
FROM table


0 commentaires

1
votes

Si vous souhaitez compter les autres valeurs aussi avec NULL , puis utilisez FOOALCEE La fonction améliorera l'heure d'exécution

Différences Oracle entre NVL et coalesce xxx


1 commentaires

Et si la colonne que vous comptez, remplacez le «1» par '' 1 '' ou «Ábc» ou quelque chose. En passant, nous le changeons également avec une regroupement à quelque chose qui ne peut pas arriver dans la réalité de la base de données. De toute façon. Donc, pour une table qui a des caractères: sélectionnez Compte (coalesce (_column, 'abc')) en tant que CNT de la carte



1
votes

Je pourrais essayer d'inverser le NULL, voir les résultats

SELECT
 COUNT(DECODE(YourField, null, 1, null)) Nulls,
 count(*) Everything,
 COUNT(YourField) NotNulls
FROM YourTable


0 commentaires

0
votes
select count(nvl(values, 0)) from emp where values is null;

1 commentaires

Pourquoi le nombre (NVL (valeurs, 0)) ? faire un SELECT Count (1) de ... ferait de même.



0
votes

Fonction: xxx

utilisation: xxx


0 commentaires

0
votes

Je crois que votre exigence est comme ci-dessous: Table EMP code> a 100 lignes. Contre 20 employés, Hire_Date code> colonne est null code>. Donc, fondamentalement, vous voulez obtenir 20 comme sortie. C'est une autre méthode à part les réponses données par d'autres contributeurs dans ce forum.

-- COUNT (1) would return 100
-- COUNT (hire_date) would return 80
-- 100 - 80 = 20
SELECT   COUNT (1) -
                 COUNT (hire_date)
                 AS null_count
FROM      emp;


0 commentaires