Upload
josiane-fouquet
View
106
Download
1
Embed Size (px)
Citation preview
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
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
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
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)
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%';
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
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.
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
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
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
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
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.
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
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
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
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.
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
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
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
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];
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
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
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.
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];