Your SlideShare is downloading. ×
7 sql group
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

7 sql group

416
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
416
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Datos Agregados por mediode Funciones de GrupoDatos Agregados por mediode Funciones de Grupo
  • 2. 1-153 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002ObjetivosObjetivosAl completar esta lección, debería sercapaz de hacer lo siguiente:Al completar esta lecciAl completar esta leccióón, debern, deberíía sera sercapaz de hacer lo siguiente:capaz de hacer lo siguiente:•• Identificar las funciones de grupoIdentificar las funciones de grupodisponibles.disponibles.•• Explicar el uso de las funciones deExplicar el uso de las funciones degrupo.grupo.•• Mostrar estadMostrar estadíísticas para diferentessticas para diferentesgrupos usando la clgrupos usando la clááusula GROUP BY.usula GROUP BY.•• Incluir o excluir filas agrupadas usandoIncluir o excluir filas agrupadas usandola clla clááusula HAVING.usula HAVING.
  • 3. 1-154 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002¿Qué son las Funciones deGrupo?¿Qué son las Funciones deGrupo?Las Funciones de Grupo operan sobre conjuntos deregistros para dar un resultado a nivel de grupo.Las Funciones de Grupo operan sobre conjuntos deLas Funciones de Grupo operan sobre conjuntos deregistros para dar un resultado a nivel de grupo.registros para dar un resultado a nivel de grupo.EMPEMP““mmááximo salarioximo salarioen la tabla EMPen la tabla EMP””DEPTNO SAL--------- ---------10 245010 500010 130020 80020 110020 300020 300020 297530 160030 285030 125030 95030 150030 1250MAX(SAL)---------5000
  • 4. 1-155 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Tipos de Funciones de GrupoTipos de Funciones de Grupo• AVG ([DISTINCT|ALL]n)• COUNT ({ *|[DISTINCT|ALL]expr})• MAX ([DISTINCT|ALL]expr)• MIN ([DISTINCT|ALL]expr)• STDDEV ([DISTINCT|ALL]x)• SUM ([DISTINCT|ALL]n)• VARIANCE ([DISTINCT|ALL]x)• AVG ([DISTINCT|ALL]n)• COUNT ({ *|[DISTINCT|ALL]expr})• MAX ([DISTINCT|ALL]expr)• MIN ([DISTINCT|ALL]expr)• STDDEV ([DISTINCT|ALL]x)• SUM ([DISTINCT|ALL]n)• VARIANCE ([DISTINCT|ALL]x)
  • 5. 1-156 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Tipos de Funciones de GrupoTipos de Funciones de Grupo• AVG ([DISTINCT|ALL]n)• COUNT ({ *|[DISTINCT|ALL]expr})• MAX ([DISTINCT|ALL]expr)• MIN ([DISTINCT|ALL]expr)• STDDEV ([DISTINCT|ALL]x)• SUM ([DISTINCT|ALL]n)• VARIANCE ([DISTINCT|ALL]x)• AVG ([DISTINCT|ALL]n)• COUNT ({ *|[DISTINCT|ALL]expr})• MAX ([DISTINCT|ALL]expr)• MIN ([DISTINCT|ALL]expr)• STDDEV ([DISTINCT|ALL]x)• SUM ([DISTINCT|ALL]n)• VARIANCE ([DISTINCT|ALL]x)
  • 6. 1-157 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de las Funciones AVG ySUMUso de las Funciones AVG ySUMAVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)-------- --------- --------- ---------1400 1600 1250 5600Puede usar AVG y SUM para datos numéricos.Puede usar AVG y SUM para datos numPuede usar AVG y SUM para datos numééricos.ricos.SQL> SELECT AVG(sal), MAX(sal),2 MIN(sal), SUM(sal)3 FROM emp4 WHERE job LIKE SALES%;
  • 7. 1-158 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de las Funciones MIN yMAXUso de las Funciones MIN yMAXPuede usar MIN y MAX para cualquier tipode dato.Puede usarPuede usar MIN y MAX para cualquier tipoy MAX para cualquier tipode dato.de dato.SQL> SELECT MIN(hiredate), MAX(hiredate)2 FROM emp;MIN(HIRED MAX(HIRED--------- ---------17-DEC-80 12-JAN-83
  • 8. 1-159 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Función COUNTUso de la Función COUNTCOUNT(*)---------6SQL> SELECT COUNT(*)2 FROM emp3 WHERE deptno = 30;COUNT(*) devuelve el nº de registros enuna tabla.COUNT(*) devuelve el nCOUNT(*) devuelve el nºº de registros ende registros enuna tabla.una tabla.
  • 9. 1-160 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Función COUNTUso de la Función COUNTCOUNT(expr) devuelve el nº de registros“no nulos” en una tabla.COUNT(COUNT(exprexpr) devuelve el n) devuelve el nºº de registrosde registros““no nulosno nulos”” en una tabla.en una tabla.SQL> SELECT COUNT(comm)2 FROM emp3 WHERE deptno = 30;COUNT(COMM)-----------4
  • 10. 1-161 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Funciones de Grupo y Val. NulosFunciones de Grupo y Val. NulosLas Funciones de Grupo ignoran losvalores nulos de las columnas.Las Funciones de Grupo ignoran losLas Funciones de Grupo ignoran losvalores nulos de las columnas.valores nulos de las columnas.SQL> SELECT AVG(comm)2 FROM emp;AVG(COMM)---------550
  • 11. 1-162 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Función NVL conFunciones de GrupoUso de la Función NVL conFunciones de GrupoLa Función NVL fuerza a las funciones degrupo a incluir valores nulos (null).La FunciLa Funcióón NVL fuerza a las funciones den NVL fuerza a las funciones degrupo a incluir valores nulos (grupo a incluir valores nulos (nullnull).).SQL> SELECT AVG(NVL(comm,0))2 FROM emp;AVG(NVL(COMM,0))----------------157.14286
  • 12. 1-163 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Creando Grupos de DatosCreando Grupos de DatosEMPEMP““media demedia desalariossalariosen EMPen EMPpara cadapara cadadepartamentodepartamento””2916.66672916.6667217521751566.66671566.6667DEPTNO SAL--------- ---------10 245010 500010 130020 80020 110020 300020 300020 297530 160030 285030 125030 95030 150030 1250DEPTNO AVG(SAL)------- ---------10 2916.666720 217530 1566.6667
  • 13. 1-164 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Creando Grupos de Datos:La Cláusula GROUP BYCreando Grupos de Datos:La Cláusula GROUP BYSELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];Divide los registros de una tabla en gruposmás pequeños, por medio de GROUP BY.Divide los registros de una tabla en gruposDivide los registros de una tabla en gruposmmáás peques pequeñños, por medio de GROUP BY.os, por medio de GROUP BY.
  • 14. 1-165 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Cláusula GROUP BYUso de la Cláusula GROUP BYTodas las columnas mencionadas en laSELECT que no son funciones de grupo,tienen que estar en la cláusula GROUP BY.Todas las columnas mencionadas en laTodas las columnas mencionadas en laSELECT que no son funciones de grupo,SELECT que no son funciones de grupo,tienen que estar en la cltienen que estar en la clááusula GROUP BY.usula GROUP BY.SQL> SELECT deptno, AVG(sal)2 FROM emp3 GROUP BY deptno;DEPTNO AVG(SAL)--------- ---------10 2916.666720 217530 1566.6667
  • 15. 1-166 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Cláusula GROUP BYUso de la Cláusula GROUP BYLa columna referencia por GROUP BY noes necesario seleccionarla.La columna referencia por GROUP BY noLa columna referencia por GROUP BY noes necesario seleccionarla.es necesario seleccionarla.SQL> SELECT AVG(sal)2 FROM emp3 GROUP BY deptno;AVG(SAL)---------2916.666721751566.6667
  • 16. 1-167 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Agrupación por Más de UnaColumnaAgrupación por Más de UnaColumnaEMPEMP““suma de salariossuma de salariosde EMP parade EMP paracada oficio (cada oficio (jobjob),),agrupado poragrupado pordepartamentodepartamento””DEPTNO JOB SAL--------- --------- ---------10 MANAGER 245010 PRESIDENT 500010 CLERK 130020 CLERK 80020 CLERK 110020 ANALYST 300020 ANALYST 300020 MANAGER 297530 SALESMAN 160030 MANAGER 285030 SALESMAN 125030 CLERK 95030 SALESMAN 150030 SALESMAN 1250JOB SUM(SAL)--------- ---------CLERK 1300MANAGER 2450PRESIDENT 5000ANALYST 6000CLERK 1900MANAGER 2975CLERK 950MANAGER 2850SALESMAN 5600DEPTNO--------101010202020303030
  • 17. 1-168 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Cláusula GROUP BYsobre Múltiples ColumnasUso de la Cláusula GROUP BYsobre Múltiples ColumnasSQL> SELECT deptno, job, sum(sal)2 FROM emp3 GROUP BY deptno, job;DEPTNO JOB SUM(SAL)--------- --------- ---------10 CLERK 130010 MANAGER 245010 PRESIDENT 500020 ANALYST 600020 CLERK 1900...9 rows selected.
  • 18. 1-169 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Consultas No válidasUsando Funciones de GrupoConsultas No válidasUsando Funciones de GrupoCualquier columna o expresión en laSELECT que no sea una función agregada,tiene que ser especificada en la cláusulaGROUP BY.Cualquier columna o expresiCualquier columna o expresióón en lan en laSELECT que no sea una funciSELECT que no sea una funcióón agregada,n agregada,tiene que ser especificada en la cltiene que ser especificada en la clááusulausulaGROUP BY.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 functionSELECT deptno, COUNT(ename)*ERROR at line 1:ORA-00937: not a single-group group functionColumna NOespecificada enla cláusula GROUPBYColumna NOespecificada enla clColumna NOespecificada enla clááusula GROUPBYusula GROUPBY
  • 19. 1-170 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Consultas No válidasUsando Funciones de GrupoConsultas No válidasUsando Funciones de Grupo• No puede usar una cláusula WHERE pararestringir grupos.• Utilice la cláusula HAVING para restringir grupos.• No puede usar una cláusula WHERE pararestringir grupos.• Utilice la cláusula HAVING para restringir grupos.SQL> SELECT deptno, AVG(sal)2 FROM emp3 WHERE AVG(sal) > 20004 GROUP BY deptno;SQL> SELECT deptno, AVG(sal)2 FROM emp3 WHERE AVG(sal) > 20004 GROUP BY deptno;WHERE AVG(sal) > 2000*ERROR at line 3:ORA-00934: group function is not allowed hereWHERE AVG(sal) > 2000*ERROR at line 3:ORA-00934: group function is not allowed hereNopuede usar la cláusula WHEREpara restringir gruposNopuede usar la clNopuede usar la clááusula WHEREusula WHEREpara restringir grupospara restringir grupos
  • 20. 1-171 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Exclusión de Resultados de unGrupoExclusión de Resultados de unGrupo““mmááximo salarioximo salariopor departamentopor departamentomayor de 2900$mayor de 2900$””EMPEMP500050003000300028502850DEPTNO SAL--------- ---------10 245010 500010 130020 80020 110020 300020 300020 297530 160030 285030 125030 95030 150030 1250DEPTNO MAX(SAL)--------- ---------10 500020 3000
  • 21. 1-172 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Exclusión de Resultados de unGrupo:Cláusula HAVINGExclusión de Resultados de unGrupo:Cláusula HAVINGUse la cláusula HAVING para restringir grupos:– Los registros son agrupados.– Se aplica la función de grupo.– Los grupos que se corresponden con lacláusula HAVING se visualizan.Use la clUse la clááusula HAVING para restringir grupos:usula HAVING para restringir grupos:– Los registros son agrupados.– Se aplica la función de grupo.– Los grupos que se corresponden con lacláusula HAVING se visualizan.SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];
  • 22. 1-173 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Cláusula HAVINGUso de la Cláusula HAVINGSQL> SELECT deptno, max(sal)2 FROM emp3 GROUP BY deptno4 HAVING max(sal)>2900;DEPTNO MAX(SAL)--------- ---------10 500020 3000
  • 23. 1-174 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de la Cláusula HAVINGUso de la Cláusula HAVINGSQL> SELECT job, SUM(sal) PAYROLL2 FROM emp3 WHERE job NOT LIKE SALES%3 GROUP BY job4 HAVING SUM(sal)>50005 ORDER BY SUM(sal);JOB PAYROLL--------- ---------ANALYST 6000MANAGER 8275
  • 24. 1-175 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Anidamiento de Funciones deGrupoAnidamiento de Funciones deGrupoSQL> SELECT max(avg(sal))2 FROM emp3 GROUP BY deptno;MAX(AVG(SAL))-------------2916.6667Visualizar la máxima media de salarios pordepartamento:Visualizar la mVisualizar la mááxima media de salarios porxima media de salarios pordepartamento:departamento:
  • 25. 1-176 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002ResumenResumenSELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];