Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
2 avril 2012 1 02 /04 /avril /2012 21:34

 

Oracle COUNT.

Comment regrouper et compter le nombre de lignes avec la fonction de groupe COUNT ?

 

Fonction COUNT.

La fonction de groupe ou fonction d’agrégat COUNT retourne un nombre de lignes issue d'une requête ou sous-interrogation.

 

SYNTAXE COUNT.

 
 COUNT({* | [DISTINCT | ALL] }) 

* (astérisque) compte toute les lignes quel que soit les valeurs NULL, la fonction de groupe COUNT(*) prend en compte les valeurs NULL.
L’option DISTINCT évite les duplicatas (doublons) alors que ALL les prend en compte (Option par défaut de la fonction).

 

FONCTION DE GROUPE COUNT

 
 TABLE DEMO SQL> SELECT * FROM SCOTT.EMP; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------------------------------------------------------------------- 7369 SMITH CLERK 7902 800.5 30 7499 ALLEN SALESMAN 20/02/1981 1600 300 30 7521 WARD SALESMAN 7698 22/02/1981 1250 500.56 30 7566 JONES MANAGER 7839 02/04/1981 2975 30 7654 MARTIN SALESMAN 7698 28/09/1981 1250 1400 40 

 

FONCTION COUNT SANS REGROUPEMENT

 
 SQL> SELECT COUNT(*), COUNT(DISTINCT JOB), COUNT(ALL DEPTNO), COUNT(DISTINCT DEPTNO) FROM SCOTT.EMP; COUNT(*) COUNT(DISTINCTJOB) COUNT(ALLDEPTNO) COUNT(DISTINCTDEPTNO) ---------- ------------------ ---------------- --------------------- 5 3 5 2 SQL> 

3 job distinct, 2 Deptno distinct (valeur NULL non retournée avec DISTINCT).

 

ORA-00937: la fonction de groupe ne porte pas sur un groupe simple

 
 SQL> COL JOB FORMAT A10 SQL> SELECT JOB, COUNT(*), COUNT(DISTINCT JOB), COUNT(ALL DEPTNO), COUNT(DISTINCT DEPTNO) FROM SCOTT.EMP; SELECT JOB, * ERREUR à la ligne 1 : ORA-00937: la fonction de groupe ne porte pas sur un groupe simple SQL> SQL> 

Pour le regroupement de données explicite, il faut utiliser la clause GROUP BY

 

Clause GROUP BY avec fonction de groupe COUNT.

 
 SQL> COL JOB FORMAT A10 SQL> SELECT JOB, COUNT(*), COUNT(DISTINCT JOB), COUNT(ALL DEPTNO), COUNT(DISTINCT DEPTNO) FROM SCOTT.EMP GROUP BY (JOB); JOB COUNT(*) COUNT(DISTINCTJOB) COUNT(ALLDEPTNO) COUNT(DISTINCTDEPTNO) ---------- ---------- ------------------ ---------------- --------------------- CLERK 1 1 1 1 MANAGER 1 1 1 1 SALESMAN 3 1 3 2 SQL> 

La clause GROUP BY liste les colonnes du groupement, ici il se fait sur le champ JOB. Il doit y avoir une cohérence entre les colonnes du SELECT et du GROUP BY.

 

Condition HAVING avec fonction de groupe COUNT.

 
 SQL> COL JOB FORMAT A10 SQL> SELECT JOB, COUNT(*), COUNT(DISTINCT JOB), COUNT(ALL DEPTNO), COUNT(DISTINCT DEPTNO) FROM SCOTT.EMP GROUP BY (JOB) HAVING COUNT(DISTINCT DEPTNO)=2; JOB COUNT(*) COUNT(DISTINCTJOB) COUNT(ALLDEPTNO) COUNT(DISTINCTDEPTNO) ---------- ---------- ------------------ ---------------- --------------------- SALESMAN 3 1 3 2 SQL> 

La condition lors d’un regroupement se fait en utilisant la clause HAVING, elle permet de poser des conditions sur chaque regroupement.

 

 

Haut de Page www.dba-ora.fr

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Instruction SQL GROUP BY
• Instruction SQL SELECT FROM WHERE

Partager cet article

Repost 0
Published by Daniel Roesch - dans FUNCTIONS - SQL
commenter cet article

commentaires