Comment puis-je compter uniquement les valeurs nulles dans Oracle / Plsql? P>
Je veux compter uniquement les valeurs nulelles. Y a-t-il une fonction qui fait ça? P>
8 Réponses :
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
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.
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. p> blockquote>
Par exemple, à l'aide du schéma Scott: p>
xxx pré> Vous pouvez voir que la colonne COMM a 4 valeurs connues (c.-à-d. NON NULL) et 10 INCONNUS Valeurs (c.-à-d. NULL) P>
comme
comptez (votre_column_name) code> 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 . p>
xxx pré> 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. P>
EDIT: strong> p>
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: p>
xxx pré> p>
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
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
Si vous souhaitez compter les autres valeurs aussi avec Différences Oracle entre NVL et coalesce p>
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
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
select count(nvl(values, 0)) from emp where values is null;
Pourquoi le nombre (NVL (valeurs, 0)) code>? faire un
SELECT Count (1) de ... code> ferait de même.
Fonction: utilisation: p>
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;