SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

24
Copyright Oracle Corporation, 1998. Tous droits réservés. 5 5 Regrouper les Données avec les Fonctions de Groupe www.TelechargerCou rs.com

description

SQL Oracle | Regrouper les Données avec les Fonctions de Groupe. Telecharger cours sql oracle gratuit. Objectifs du cours... http://www.telechargercours.com

Transcript of SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

Page 1: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

Copyright Oracle Corporation, 1998. Tous droits réservés.

55

Regrouper les Données avec les Fonctions de

Groupe

Regrouper les Données avec les Fonctions de

Groupe

www.TelechargerCours.com

Page 2: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-2 Copyright Oracle Corporation, 1998. Tous droits réservés.

ObjectifsObjectifs

A la fin de ce chapitre, vous saurez :A la fin de ce chapitre, vous saurez :

• Identifier les fonctions de groupe disponibles

• Expliquer l'utilisation des fonctions de groupe

• Regrouper les données avec la clause GROUP BY

• Inclure ou exclure des groupes de lignes avec la clause HAVING

A la fin de ce chapitre, vous saurez :A la fin de ce chapitre, vous saurez :

• Identifier les fonctions de groupe disponibles

• Expliquer l'utilisation des fonctions de groupe

• Regrouper les données avec la clause GROUP BY

• Inclure ou exclure des groupes de lignes avec la clause HAVING

www.TelechargerCours.com

Page 3: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-3 Copyright Oracle Corporation, 1998. Tous droits réservés.

Fonctions de GroupeFonctions de GroupeLes fonctions de groupe agissent sur des groupes de Les fonctions de groupe agissent sur des groupes de lignes et donnent un résultat par groupe.lignes et donnent un résultat par groupe.Les fonctions de groupe agissent sur des groupes de Les fonctions de groupe agissent sur des groupes de lignes et donnent un résultat par groupe.lignes et donnent un résultat par groupe.

EMPEMP

"salaire maximum"salaire maximumde la table EMP"de la table EMP"

DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

MAX(SAL)

---------

5000

www.TelechargerCours.com

Page 4: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-4 Copyright Oracle Corporation, 1998. Tous droits réservés.

Types de Fonctions de GroupeTypes de Fonctions de Groupe

• AVG ([DISTINCT|ALL]n)

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

• MAX ([DISTINCT|ALL]expr)

• MIN ([DISTINCT|ALL]expr)

• STDDEV ([DISTINCT|ALL]n)

• SUM ([DISTINCT|ALL]n)

• VARIANCE ([DISTINCT|ALL]n)

• AVG ([DISTINCT|ALL]n)

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

• MAX ([DISTINCT|ALL]expr)

• MIN ([DISTINCT|ALL]expr)

• STDDEV ([DISTINCT|ALL]n)

• SUM ([DISTINCT|ALL]n)

• VARIANCE ([DISTINCT|ALL]n)

www.TelechargerCours.com

Page 5: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-6 Copyright Oracle Corporation, 1998. Tous droits réservés.

Fonctions AVG et SUMFonctions AVG et SUM

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)-------- --------- --------- --------- 1400 1600 1250 5600

AVG et SUM s'utilisent avec des données AVG et SUM s'utilisent avec des données numériques.numériques.AVG et SUM s'utilisent avec des données AVG et SUM s'utilisent avec des données numériques.numériques.

SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%';

www.TelechargerCours.com

Page 6: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-7 Copyright Oracle Corporation, 1998. Tous droits réservés.

Fonctions MIN et MAXFonctions MIN et MAX

MIN et MAX s'utilisent avec tous types de MIN et MAX s'utilisent avec tous types de données.données.MIN et MAX s'utilisent avec tous types de MIN et MAX s'utilisent avec tous types de données.données.

SQL> SELECT MIN(hiredate), MAX(hiredate) 2 FROM emp;

MIN(HIRED MAX(HIRED--------- ---------17-DEC-80 12-JAN-83

www.TelechargerCours.com

Page 7: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-8 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la Fonction COUNTUtilisation de la Fonction COUNT

COUNT(*)--------- 6

SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno = 30;

COUNT(*) ramène le nombre de lignes COUNT(*) ramène le nombre de lignes d'une table.d'une table.COUNT(*) ramène le nombre de lignes COUNT(*) ramène le nombre de lignes d'une table.d'une table.

www.TelechargerCours.com

Page 8: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-9 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la Fonction COUNTUtilisation de la Fonction COUNT

COUNT(COUNT(exprexpr) ramène le nombre de lignes ) ramène le nombre de lignes non NULL.non NULL.COUNT(COUNT(exprexpr) ramène le nombre de lignes ) ramène le nombre de lignes non NULL.non NULL.

SQL> SELECT COUNT(comm) 2 FROM emp 3 WHERE deptno = 30;

COUNT(COMM)----------- 4

www.TelechargerCours.com

Page 9: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-10 Copyright Oracle Corporation, 1998. Tous droits réservés.

Fonctions de Groupe et Valeurs NULL

Fonctions de Groupe et Valeurs NULL

Les fonctions de groupe ignorent les Les fonctions de groupe ignorent les valeurs NULL des colonnes.valeurs NULL des colonnes.Les fonctions de groupe ignorent les Les fonctions de groupe ignorent les valeurs NULL des colonnes.valeurs NULL des colonnes.

SQL> SELECT AVG(comm) 2 FROM emp;

AVG(COMM)--------- 550

www.TelechargerCours.com

Page 10: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-11 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la Fonction NVL avec les Fonctions de Groupe Utilisation de la Fonction NVL avec les Fonctions de Groupe

La fonction NVL force la prise en compte La fonction NVL force la prise en compte des valeurs NULL dans les fonctions de des valeurs NULL dans les fonctions de groupe.groupe.

La fonction NVL force la prise en compte La fonction NVL force la prise en compte des valeurs NULL dans les fonctions de des valeurs NULL dans les fonctions de groupe.groupe.SQL> SELECT AVG(NVL(comm,0)) 2 FROM emp;

AVG(NVL(COMM,0))---------------- 157.14286

www.TelechargerCours.com

Page 11: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-12 Copyright Oracle Corporation, 1998. Tous droits réservés.

Création de Groupes de DonnéesCréation de Groupes de Données

EMPEMP

"salaire "salaire moyen pour moyen pour

chaque chaque département département

de la table de la table EMP"EMP"

2916.66672916.6667

21752175

1566.66671566.6667

DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

www.TelechargerCours.com

Page 12: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-13 Copyright Oracle Corporation, 1998. Tous droits réservés.

Création de Groupes de Données : la Clause GROUP BY

Création de Groupes de Données : la Clause GROUP BY

SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];

Divisez une table en groupes de lignes Divisez une table en groupes de lignes avec la clause GROUP BY.avec la clause GROUP BY.Divisez une table en groupes de lignes Divisez une table en groupes de lignes avec la clause GROUP BY.avec la clause GROUP BY.

www.TelechargerCours.com

Page 13: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-14 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la Clause GROUP BYUtilisation de la Clause GROUP BY

La clause GROUP BY doit inclure toutes les La clause GROUP BY doit inclure toutes les colonnes de la liste SELECT qui ne figurent colonnes de la liste SELECT qui ne figurent pas dans des fonctions de groupe.pas dans des fonctions de groupe.

La clause GROUP BY doit inclure toutes les La clause GROUP BY doit inclure toutes les colonnes de la liste SELECT qui ne figurent colonnes de la liste SELECT qui ne figurent pas dans des fonctions de groupe.pas dans des fonctions de groupe.

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno;

DEPTNO AVG(SAL)--------- --------- 10 2916.6667 20 2175 30 1566.6667

www.TelechargerCours.com

Page 14: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-15 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la Clause GROUP BYUtilisation de la Clause GROUP BY

La colonne citée en GROUP BY ne doit pas La colonne citée en GROUP BY ne doit pas nécessairement figurer dans la liste SELECT.nécessairement figurer dans la liste SELECT.La colonne citée en GROUP BY ne doit pas La colonne citée en GROUP BY ne doit pas nécessairement figurer dans la liste SELECT.nécessairement figurer dans la liste SELECT.

SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno;

AVG(SAL)--------- 2916.6667 21751566.6667

www.TelechargerCours.com

Page 15: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-16 Copyright Oracle Corporation, 1998. Tous droits réservés.

Regroupement sur Plusieurs Colonnes

Regroupement sur Plusieurs Colonnes

EMPEMP

'"somme des '"somme des salairessalaires

de la table EMPde la table EMP pour chaque pour chaque

poste, poste, regroupés par regroupés par département"département"

DEPTNO JOB SAL

--------- --------- ---------

10 MANAGER 2450

10 PRESIDENT 5000

10 CLERK 1300

20 CLERK 800

20 CLERK 1100

20 ANALYST 3000

20 ANALYST 3000

20 MANAGER 2975

30 SALESMAN 1600

30 MANAGER 2850

30 SALESMAN 1250

30 CLERK 950

30 SALESMAN 1500

30 SALESMAN 1250

JOB SUM(SAL)

--------- ---------

CLERK 1300

MANAGER 2450

PRESIDENT 5000

ANALYST 6000

CLERK 1900

MANAGER 2975

CLERK 950

MANAGER 2850

SALESMAN 5600

DEPTNO

--------

10

10

10

20

20

20

30

30

30

www.TelechargerCours.com

Page 16: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-17 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la Clause GROUP BY sur Plusieurs Colonnes

Utilisation de la Clause GROUP BY sur Plusieurs Colonnes

SQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job;

DEPTNO JOB SUM(SAL)--------- --------- --------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900...9 rows selected.

www.TelechargerCours.com

Page 17: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-18 Copyright Oracle Corporation, 1998. Tous droits réservés.

Erreurs d'Utilisation des Fonctions de Groupe dans une Requête

Erreurs d'Utilisation des Fonctions de Groupe dans une Requête

Toute colonne ou expression de la liste Toute colonne ou expression de la liste SELECT autre qu'une fonction de groupe, SELECT autre qu'une fonction de groupe, doit être incluse dans la clause GROUP BY.doit être incluse dans la clause GROUP BY.

Toute colonne ou expression de la liste Toute colonne ou expression de la liste SELECT autre qu'une fonction de groupe, SELECT autre qu'une fonction de groupe, doit être incluse dans la clause GROUP BY.doit être incluse dans la clause GROUP BY.

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: not a single-group group function

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: not a single-group group function

Colonne manquante dans la

clause GROUP B

Y

Colonne manquante dans la

clause GROUP B

Y

Colonne manquante dans la

clause GROUP B

Y

Colonne manquante dans la

clause GROUP B

Y

www.TelechargerCours.com

Page 18: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-19 Copyright Oracle Corporation, 1998. Tous droits réservés.

Erreurs d'utilisation des Fonctions de Groupe dans une Requête

Erreurs d'utilisation des Fonctions de Groupe dans une Requête

• Vous ne pouvez utiliser la clause WHERE pour limiter les groupes.

• Utilisez la clause HAVING.

• Vous ne pouvez utiliser la clause WHERE pour limiter les groupes.

• Utilisez la clause HAVING.

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: group function is not allowed here

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: group function is not allowed here

N'utilisez p

as la clause W

HERE pour lim

iter l

es

N'utilisez p

as la clause W

HERE pour lim

iter l

es

groupes

groupes

N'utilisez p

as la clause W

HERE pour lim

iter l

es

N'utilisez p

as la clause W

HERE pour lim

iter l

es

groupes

groupes

Page 19: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-20 Copyright Oracle Corporation, 1998. Tous droits réservés.

Exclusion de GroupesExclusion de Groupes

"salaire maximum"salaire maximumsupérieur à supérieur à $2900 dans$2900 dans

chaque chaque département"département"

EMPEMP

50005000

30003000

28502850

DEPTNO SAL

--------- ---------

10 2450

10 5000

10 1300

20 800

20 1100

20 3000

20 3000

20 2975

30 1600

30 2850

30 1250

30 950

30 1500

30 1250

DEPTNO MAX(SAL)

--------- ---------

10 5000

20 3000

www.TelechargerCours.com

Page 20: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-21 Copyright Oracle Corporation, 1998. Tous droits réservés.

Exclusion de Groupes : la Clause HAVING

Exclusion de Groupes : la Clause HAVING

Utilisez la clause HAVING pour restreindre les Utilisez la clause HAVING pour restreindre les groupesgroupes

– Les lignes sont regroupées.

– La fonction de groupe est appliquée.

– Les groupes qui correspondent à la clause HAVING sont affichés.

Utilisez la clause HAVING pour restreindre les Utilisez la clause HAVING pour restreindre les groupesgroupes

– Les lignes sont regroupées.

– La fonction de groupe est appliquée.

– Les groupes qui correspondent à la clause HAVING sont affichés.

SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

Page 21: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-22 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la clause HAVINGUtilisation de la clause HAVING

SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900;

DEPTNO MAX(SAL)--------- --------- 10 5000 20 3000

www.TelechargerCours.com

Page 22: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-23 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de la Clause HAVINGUtilisation de la Clause HAVING

SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 3 GROUP BY job 4 HAVING SUM(sal)>5000 5 ORDER BY SUM(sal);

JOB PAYROLL--------- ---------ANALYST 6000MANAGER 8275

www.TelechargerCours.com

Page 23: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-24 Copyright Oracle Corporation, 1998. Tous droits réservés.

Imbrication des Fonctions de Groupe

Imbrication des Fonctions de Groupe

SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno;

MAX(AVG(SAL))------------- 2916.6667

Afficher le salaire moyen maximum. Afficher le salaire moyen maximum. Afficher le salaire moyen maximum. Afficher le salaire moyen maximum.

www.TelechargerCours.com

Page 24: SQL Oracle | Regrouper les Données avec les Fonctions de Groupe

5-25 Copyright Oracle Corporation, 1998. Tous droits réservés.

RésuméRésumé

SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

www.TelechargerCours.com