SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
4
Usando funciones para manipular
        grupos de datos
Objetivos

 Al completar esta lección usted podrá realizar los
 siguientes puntos:
 •       Identificar las funciones disponibles.
 •       Describir como usar una función de grupo.
 •       Agrupar datos mediante la cláusula GROUP BY.
 •       Incluir o excluir datos agrupados mediante el uso de la
         cláusula HAVING.




L -- 2
L2
?Como trabajan las funciones de grupo?

 Las funciones de grupo opera sobre un conjunto de
 registros y se retorna un solo resultado por grupo.
    department_id | salary
   ---------------+--------
               80 | 14000
               80 | 13500
               80 | 12000
               80 | 11000
               80 | 10500
               80 | 10000
               80 |   9500                max
               80 |   9000
                                         -------
               80 |   8000
               80 |   7500                24000
               80 |   7000
                                         (1 row)
               80 | 10000
               80 |   9500
               80 |   9000
                                      Salario mas alto de
               80 |   8000
                                      la tabla employees.
               80 |   7500
               80 |   7000
               80 | 10500
   (107 rows)


L -- 3
L3
Funciones de grupo
 Funciones básicas que realizan operaciones a un
 grupo de registros en especifico:
 •       AVG
 •       COUNT
 •       MAX
 •       MIN
 •       SUM




L -- 4
L4
Sintaxis Básica

SELECT   [ column ], group_function(column) [, ...]
FROM     from_item
[WHERE   condition]
[GROUP   BY column]
[ORDER   BY column];




L -- 5
L5
Usando las funciones AVG, MAX, MIN y SUM

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)
FROM   employees
WHERE department_id = 80;

          avg          | max | min | sum
-----------------------+-------+------+--------
 8955.8823529411764706 | 14000 | 6100 | 304500
(1 row)




L -- 6
L6
Usando las funciones MAX y MIN

 Puede utilizar las funciones MAX y MIN para los tipos de
 datos numéricos, caracteres y fechas.
SELECT MAX(hire_date), MIN(hire_date)
FROM   employees
WHERE department_id = 80;

    max     |    min
------------+------------
 2000-04-21 | 1996-01-30
(1 row)




L -- 7
L7
Usando la funciones COUNT
         La función COUNT(*) retorna la cantidad total de registros que
1
         se encuentran en una tabla.
         SELECT COUNT(*)
         FROM   employees;

          count
         -------
            107

         La función COUNT(expr) retorna la cantidad total de registros
2
         NO NULL que se encuentran en una tabla.
         SELECT COUNT(commission_pct)
         FROM   employees;

          count
         -------
             35


L -- 8
L8
Usando la palabra DISTINCT

 • Usando la palabra DISTINCT se eliminan todos los
   valores duplicados.
 • Puede emplear la palabra DISTINCT dentro de cualquier
   función.
 • Retorna todo los elementos que NO son del tipo NULL.




L -- 9
L9
Usando la palabra DISTINCT
  La siguiente consulta cuenta cuantos departamentos
  se encuentran asignados en la tabla employees.
 SELECT COUNT(DISTINCT department_id)
 FROM   employees;

  count
 -------
     11
 (1 row)




L -- 10
L 10
Funciones de grupo y valores NULL
          Las funciones de grupo ignoran los valores NULL.
1

          SELECT AVG(commission_pct)
          FROM   employees;

           avg
          ------------------------
           0.22285714285714285714

          La función COALESCE obliga a las funciones de grupo que
2
          incluya los valores de tipo NULL.
          SELECT AVG(COALESCE(commission_pct, 0))
          FROM   employees;

            avg
          ------------------------
           0.07289719626168224299


L -- 11
L 11
Creando grupo de datos
    department_id | salary
   ---------------+--------
               10 |   4400
               20 | 13000
               20 |   6000
               30 |   3100
                               department_id |          avg
               30 | 11000
                              ---------------+------------------------
               30 |   2500
               30 |   2900                10 | 4400.0000000000000000
               40 |   6500
                                          20 | 9500.0000000000000000
               50 |   2500
                                          30 | 4150.0000000000000000
               50 |   8000
                                          40 | 6500.0000000000000000
               50 |   8200
                                          50 | 3475.5555555555555556
               60 |   6000
               60 |   9000                60 | 5760.0000000000000000
               70 | 10000                 70 | 10000.0000000000000000
               80 |   9500
                                          80 | 8955.8823529411764706
               80 |   9000
                                          90 |     19333.333333333333
               80 |   8000
                                         100 | 8600.0000000000000000
               90 | 24000
                                         110 | 10150.0000000000000000
               90 | 17000
               90 | 17000                    | 7000.0000000000000000
              100 |   6900    (12 rows)
              100 |   9000
              100 | 12000
                                   Promedio del salario por cada
              110 |   8300
                               departamento y por cada empleado del
              110 | 12000
   (107 rows)
                                       mismo departamento
L -- 12
L 12
Sintaxis Básica

 SELECT   [ column ], group_function(column) [, ...]
 FROM     from_item
 [WHERE   condition]
 [GROUP   BY column]
 [ORDER   BY column];

  Permite dividir los registros de una tabla en pequeños
  grupos usando la cláusula GROUP BY.
  • No puedes utilizar Alias dentro de la cláusula GROUP BY.
  • Solo puedes incluir el nombre de la columna dentro de la
    cláusula GROUP BY.
  • Si no usas funciones de grupo no podrás apreciar
    resultados individuales.


L -- 13
L 13
Usando la cláusula GROUP BY
  Todas las columnas dentro de la sentencia SELECT no
  deben estar en la función de grupo si no en la
  clausúrala GROUP BY.
 SELECT     department_id, AVG(salary)
 FROM       employees
 GROUP BY   department_id
 ORDER BY   department_id;

  department_id |          avg
 ---------------+------------------------
             10 | 4400.0000000000000000
             20 | 9500.0000000000000000
             30 | 4150.0000000000000000
             40 | 6500.0000000000000000
             50 | 3475.5555555555555556
             60 | 5760.0000000000000000
 (12 rows)


L -- 14
L 14
Usando la cláusula GROUP BY
  Las columnas dentro la cláusula GROUP BY no tienen
  que estar dentro de la sentencia SELECT .
 SELECT   AVG(salary)
 FROM     employees
 GROUP BY department_id;
  avg
 ------------------------
   7000.0000000000000000
  10150.0000000000000000
   8600.0000000000000000
      19333.333333333333
   8955.8823529411764706
  10000.0000000000000000
   5760.0000000000000000
   3475.5555555555555556
   6500.0000000000000000
   4150.0000000000000000
 (12 rows)

L -- 15
L 15
Agrupando por mas de una columna
 department_id |   job_id   | salary
---------------+------------+--------
            10 | AD_ASST    |   4400
            30 | PU_CLERK   |   3100
            30 | PU_CLERK   |   2800
            30 | PU_CLERK   |   2500
            30 | PU_CLERK   |   2600
                                         department_id |   job_id   | sum
            30 | PU_CLERK   |   2900
                                        ---------------+------------+--------
            50 | SH_CLERK   |   3800
                                                    10 | AD_ASST    |   4400
            50 | SH_CLERK   |   3000
                                                    20 | MK_MAN     | 13000
            50 | SH_CLERK   |   3400
                                                    20 | MK_REP     |   6000
            50 | SH_CLERK   |   4100
                                                    30 | PU_CLERK   | 13900
            50 | SH_CLERK   |   4200
                                                    30 | PU_MAN     | 11000
            50 | SH_CLERK   |   2800
                                                    40 | HR_REP     |   6500
            50 | SH_CLERK   |   2500
                                                    50 | SH_CLERK   | 64300
            60 | IT_PROG    |   9000
                                                    50 | ST_CLERK   | 55700
            60 | IT_PROG    |   4200
                                                    50 | ST_MAN     | 36400
            60 | IT_PROG    |   4800
                                                    60 | IT_PROG    | 28800
            60 | IT_PROG    |   4800
                                                    70 | PR_REP     | 10000
            60 | IT_PROG    |   6000
                                                    80 | SA_MAN     | 61000
           100 | FI_ACCOUNT |   7700
                                        (20 rows)
           100 | FI_ACCOUNT |   6900
           100 | FI_ACCOUNT |   9000
                                          Promedio del salario por cada
           100 | FI_ACCOUNT |   8200
           100 | FI_ACCOUNT |   7800
                                        departamento y por cada empleado
           100 | FI_MGR     | 12000
                                         del mismo cargo y departamento
(107 rows)


L -- 16
L 16
Usando la cláusula GROUP BY con múltiples
                columnas
 SELECT     department_id, job_id, SUM(salary)
 FROM       employees
 GROUP BY   department_id, job_id
 ORDER BY   department_id;

  department_id |   job_id   | sum
 ---------------+------------+--------
             10 | AD_ASST    |   4400
             20 | MK_MAN     | 13000
             20 | MK_REP     |   6000
             30 | PU_CLERK   | 13900
             30 | PU_MAN     | 11000
             40 | HR_REP     |   6500
             50 | SH_CLERK   | 64300
             50 | ST_CLERK   | 55700
             50 | ST_MAN     | 36400
             60 | IT_PROG    | 28800
             70 | PR_REP     | 10000
             80 | SA_MAN     | 61000
 (20 rows)

L -- 17
L 17
Consultas mal escritas usando las
                 funciones de grupo
  Toda columna o expresión que no se encuentra dentro
  de una función de grupo, debe estar dentro de la
  cláusula GROUP BY.
 SELECT department_id, SUM(salary)
 FROM   employees;

 ERROR: column quot;employees.department_idquot; must appear in the GROUP
 BY clause or be used in an aggregate function




L -- 18
L 18
Consultas mal escritas usando las
                 funciones de grupo
  • No se puede usar condiciones en la cláusula WHERE para
    restringir grupos.
  • Use la cláusula HAVING para restringir los grupos.
  • No use las funciones de grupo dentro de la cláusula
    WHERE.

 SELECT     department_id, job_id, AVG(salary)
 FROM       employees
 WHERE      AVG(salary) > 1000
 GROUP BY   department_id, job_id
 ORDER BY   department_id;

 ERROR:   aggregates not allowed in WHERE clause




L -- 19
L 19
Restringiendo el resultado de los grupo con
            la cláusula HAVING
  • Filtra por registros agrupados.
  • Muestra la coincidencia definida en la cláusula HAVING.

 SELECT [ column ], group_function(column) [, ...]
 FROM   from_item
 [WHERE condition]
 [GROUP BY column]
 [HAVING condition [, ...]]
 [ORDER BY column];




L -- 20
L 20
Usando la cláusula HAVING

 SELECT     department_id, MAX(salary)
 FROM       employees
 GROUP BY   department_id
 HAVING     MAX(salary) > 10000;

  department_id | max
 ---------------+-------
            110 | 12000
            100 | 12000
             90 | 24000
             80 | 14000
             30 | 11000
             20 | 13000
 (6 rows)




L -- 21
L 21
Usando la cláusula HAVING

 SELECT     job_id, SUM(salary) AS quot;PAYROLL“
 FROM       employees
 WHERE      job_id NOT LIKE '%REP%‘
 GROUP BY   job_id
 HAVING     SUM(salary) > 13000
 ORDER BY   SUM(salary);
    job_id   | PAYROLL
 ------------+---------
  PU_CLERK   |   13900
  AD_PRES    |   24000
  IT_PROG    |   28800
  AD_VP      |   34000
  ST_MAN     |   36400
  FI_ACCOUNT |   39600
  ST_CLERK   |   55700
  SA_MAN     |   61000
  SH_CLERK   |   64300
 (9 rows)


L -- 22
L 22
Funcione jerárquicas de grupo

  No se puede usar las funciones de grupo en modo
  jerárquico.

 SELECT   MAX(AVG(salary))
 FROM     employees
 GROUP BY department_id;

 ERROR:   aggregate function calls may not be nested




L -- 23
L 23
Resumen
  En esta lección, usted aprendió como:
  • Usar las funciones básicas de grupo en SQL.
     – COUNT
     – MAX
     – MIN
     – AVG
  • Escribir consultas usando la cláusula GROUP BY.
  • Escribir consultas usando la cláusula HAVING.




L -- 24
L 24

Más contenido relacionado

Similar a Postgre S Q L 4

PostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTPostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECT
Nicola Strappazzon C.
 
Teoría y problemas resueltos de Porcentajes VII ciclo ccesa007
Teoría y problemas resueltos de Porcentajes VII ciclo  ccesa007Teoría y problemas resueltos de Porcentajes VII ciclo  ccesa007
Teoría y problemas resueltos de Porcentajes VII ciclo ccesa007
Demetrio Ccesa Rayme
 
Teoría y problemas resueltos de porcentajes nivel III ccesa007
Teoría y problemas resueltos de porcentajes nivel III ccesa007Teoría y problemas resueltos de porcentajes nivel III ccesa007
Teoría y problemas resueltos de porcentajes nivel III ccesa007
Demetrio Ccesa Rayme
 
Liquidaciondeaporteslizto
LiquidaciondeaportesliztoLiquidaciondeaporteslizto
Liquidaciondeaporteslizto
Juan Diego
 
Ejercicios 1 4 regresión y correlación
Ejercicios 1 4 regresión y correlaciónEjercicios 1 4 regresión y correlación
Ejercicios 1 4 regresión y correlación
sontorito0o
 
Teoría y problemas resueltos de Porcentajes nivel II ccesa007
Teoría y problemas resueltos de Porcentajes nivel II  ccesa007Teoría y problemas resueltos de Porcentajes nivel II  ccesa007
Teoría y problemas resueltos de Porcentajes nivel II ccesa007
Demetrio Ccesa Rayme
 
Selección de calibre en cables para construcción
Selección de calibre en cables para construcciónSelección de calibre en cables para construcción
Selección de calibre en cables para construcción
Yilbert Martinez
 
Trabajo de aportes
Trabajo de aportesTrabajo de aportes
Trabajo de aportes
sena
 
Trabajo de aportes(1)
Trabajo de aportes(1)Trabajo de aportes(1)
Trabajo de aportes(1)
erikasiza
 
Trabajo de aportes(1)
Trabajo de aportes(1)Trabajo de aportes(1)
Trabajo de aportes(1)
puentes1995
 

Similar a Postgre S Q L 4 (20)

PostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTPostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECT
 
Inventarios
InventariosInventarios
Inventarios
 
Teoría y problemas resueltos de Porcentajes VII ciclo ccesa007
Teoría y problemas resueltos de Porcentajes VII ciclo  ccesa007Teoría y problemas resueltos de Porcentajes VII ciclo  ccesa007
Teoría y problemas resueltos de Porcentajes VII ciclo ccesa007
 
Teoría y problemas resueltos de porcentajes nivel III ccesa007
Teoría y problemas resueltos de porcentajes nivel III ccesa007Teoría y problemas resueltos de porcentajes nivel III ccesa007
Teoría y problemas resueltos de porcentajes nivel III ccesa007
 
Liquidaciondeaporteslizto
LiquidaciondeaportesliztoLiquidaciondeaporteslizto
Liquidaciondeaporteslizto
 
Evidencias del aprendizaje
Evidencias del aprendizajeEvidencias del aprendizaje
Evidencias del aprendizaje
 
Practica individual 1
Practica individual 1Practica individual 1
Practica individual 1
 
Duratop - catalogo
Duratop - catalogoDuratop - catalogo
Duratop - catalogo
 
Ejercicios 1 4 regresión y correlación
Ejercicios 1 4 regresión y correlaciónEjercicios 1 4 regresión y correlación
Ejercicios 1 4 regresión y correlación
 
Ayudantia 5 RESPUESTAS
Ayudantia 5 RESPUESTASAyudantia 5 RESPUESTAS
Ayudantia 5 RESPUESTAS
 
Control Pratico Umbral De Rentabilidad 2 Evaluacion
Control Pratico Umbral De Rentabilidad 2 EvaluacionControl Pratico Umbral De Rentabilidad 2 Evaluacion
Control Pratico Umbral De Rentabilidad 2 Evaluacion
 
Programación lineal
Programación linealProgramación lineal
Programación lineal
 
Teoría y problemas resueltos de Porcentajes nivel II ccesa007
Teoría y problemas resueltos de Porcentajes nivel II  ccesa007Teoría y problemas resueltos de Porcentajes nivel II  ccesa007
Teoría y problemas resueltos de Porcentajes nivel II ccesa007
 
Selección de calibre en cables para construcción
Selección de calibre en cables para construcciónSelección de calibre en cables para construcción
Selección de calibre en cables para construcción
 
Trabajo de aportes
Trabajo de aportesTrabajo de aportes
Trabajo de aportes
 
Trabajo de aportes
Trabajo de aportesTrabajo de aportes
Trabajo de aportes
 
Trabajo de aportes
Trabajo de aportesTrabajo de aportes
Trabajo de aportes
 
Trabajo de aportes
Trabajo de aportesTrabajo de aportes
Trabajo de aportes
 
Trabajo de aportes(1)
Trabajo de aportes(1)Trabajo de aportes(1)
Trabajo de aportes(1)
 
Trabajo de aportes(1)
Trabajo de aportes(1)Trabajo de aportes(1)
Trabajo de aportes(1)
 

Último

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (10)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Postgre S Q L 4

  • 1. 4 Usando funciones para manipular grupos de datos
  • 2. Objetivos Al completar esta lección usted podrá realizar los siguientes puntos: • Identificar las funciones disponibles. • Describir como usar una función de grupo. • Agrupar datos mediante la cláusula GROUP BY. • Incluir o excluir datos agrupados mediante el uso de la cláusula HAVING. L -- 2 L2
  • 3. ?Como trabajan las funciones de grupo? Las funciones de grupo opera sobre un conjunto de registros y se retorna un solo resultado por grupo. department_id | salary ---------------+-------- 80 | 14000 80 | 13500 80 | 12000 80 | 11000 80 | 10500 80 | 10000 80 | 9500 max 80 | 9000 ------- 80 | 8000 80 | 7500 24000 80 | 7000 (1 row) 80 | 10000 80 | 9500 80 | 9000 Salario mas alto de 80 | 8000 la tabla employees. 80 | 7500 80 | 7000 80 | 10500 (107 rows) L -- 3 L3
  • 4. Funciones de grupo Funciones básicas que realizan operaciones a un grupo de registros en especifico: • AVG • COUNT • MAX • MIN • SUM L -- 4 L4
  • 5. Sintaxis Básica SELECT [ column ], group_function(column) [, ...] FROM from_item [WHERE condition] [GROUP BY column] [ORDER BY column]; L -- 5 L5
  • 6. Usando las funciones AVG, MAX, MIN y SUM SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees WHERE department_id = 80; avg | max | min | sum -----------------------+-------+------+-------- 8955.8823529411764706 | 14000 | 6100 | 304500 (1 row) L -- 6 L6
  • 7. Usando las funciones MAX y MIN Puede utilizar las funciones MAX y MIN para los tipos de datos numéricos, caracteres y fechas. SELECT MAX(hire_date), MIN(hire_date) FROM employees WHERE department_id = 80; max | min ------------+------------ 2000-04-21 | 1996-01-30 (1 row) L -- 7 L7
  • 8. Usando la funciones COUNT La función COUNT(*) retorna la cantidad total de registros que 1 se encuentran en una tabla. SELECT COUNT(*) FROM employees; count ------- 107 La función COUNT(expr) retorna la cantidad total de registros 2 NO NULL que se encuentran en una tabla. SELECT COUNT(commission_pct) FROM employees; count ------- 35 L -- 8 L8
  • 9. Usando la palabra DISTINCT • Usando la palabra DISTINCT se eliminan todos los valores duplicados. • Puede emplear la palabra DISTINCT dentro de cualquier función. • Retorna todo los elementos que NO son del tipo NULL. L -- 9 L9
  • 10. Usando la palabra DISTINCT La siguiente consulta cuenta cuantos departamentos se encuentran asignados en la tabla employees. SELECT COUNT(DISTINCT department_id) FROM employees; count ------- 11 (1 row) L -- 10 L 10
  • 11. Funciones de grupo y valores NULL Las funciones de grupo ignoran los valores NULL. 1 SELECT AVG(commission_pct) FROM employees; avg ------------------------ 0.22285714285714285714 La función COALESCE obliga a las funciones de grupo que 2 incluya los valores de tipo NULL. SELECT AVG(COALESCE(commission_pct, 0)) FROM employees; avg ------------------------ 0.07289719626168224299 L -- 11 L 11
  • 12. Creando grupo de datos department_id | salary ---------------+-------- 10 | 4400 20 | 13000 20 | 6000 30 | 3100 department_id | avg 30 | 11000 ---------------+------------------------ 30 | 2500 30 | 2900 10 | 4400.0000000000000000 40 | 6500 20 | 9500.0000000000000000 50 | 2500 30 | 4150.0000000000000000 50 | 8000 40 | 6500.0000000000000000 50 | 8200 50 | 3475.5555555555555556 60 | 6000 60 | 9000 60 | 5760.0000000000000000 70 | 10000 70 | 10000.0000000000000000 80 | 9500 80 | 8955.8823529411764706 80 | 9000 90 | 19333.333333333333 80 | 8000 100 | 8600.0000000000000000 90 | 24000 110 | 10150.0000000000000000 90 | 17000 90 | 17000 | 7000.0000000000000000 100 | 6900 (12 rows) 100 | 9000 100 | 12000 Promedio del salario por cada 110 | 8300 departamento y por cada empleado del 110 | 12000 (107 rows) mismo departamento L -- 12 L 12
  • 13. Sintaxis Básica SELECT [ column ], group_function(column) [, ...] FROM from_item [WHERE condition] [GROUP BY column] [ORDER BY column]; Permite dividir los registros de una tabla en pequeños grupos usando la cláusula GROUP BY. • No puedes utilizar Alias dentro de la cláusula GROUP BY. • Solo puedes incluir el nombre de la columna dentro de la cláusula GROUP BY. • Si no usas funciones de grupo no podrás apreciar resultados individuales. L -- 13 L 13
  • 14. Usando la cláusula GROUP BY Todas las columnas dentro de la sentencia SELECT no deben estar en la función de grupo si no en la clausúrala GROUP BY. SELECT department_id, AVG(salary) FROM employees GROUP BY department_id ORDER BY department_id; department_id | avg ---------------+------------------------ 10 | 4400.0000000000000000 20 | 9500.0000000000000000 30 | 4150.0000000000000000 40 | 6500.0000000000000000 50 | 3475.5555555555555556 60 | 5760.0000000000000000 (12 rows) L -- 14 L 14
  • 15. Usando la cláusula GROUP BY Las columnas dentro la cláusula GROUP BY no tienen que estar dentro de la sentencia SELECT . SELECT AVG(salary) FROM employees GROUP BY department_id; avg ------------------------ 7000.0000000000000000 10150.0000000000000000 8600.0000000000000000 19333.333333333333 8955.8823529411764706 10000.0000000000000000 5760.0000000000000000 3475.5555555555555556 6500.0000000000000000 4150.0000000000000000 (12 rows) L -- 15 L 15
  • 16. Agrupando por mas de una columna department_id | job_id | salary ---------------+------------+-------- 10 | AD_ASST | 4400 30 | PU_CLERK | 3100 30 | PU_CLERK | 2800 30 | PU_CLERK | 2500 30 | PU_CLERK | 2600 department_id | job_id | sum 30 | PU_CLERK | 2900 ---------------+------------+-------- 50 | SH_CLERK | 3800 10 | AD_ASST | 4400 50 | SH_CLERK | 3000 20 | MK_MAN | 13000 50 | SH_CLERK | 3400 20 | MK_REP | 6000 50 | SH_CLERK | 4100 30 | PU_CLERK | 13900 50 | SH_CLERK | 4200 30 | PU_MAN | 11000 50 | SH_CLERK | 2800 40 | HR_REP | 6500 50 | SH_CLERK | 2500 50 | SH_CLERK | 64300 60 | IT_PROG | 9000 50 | ST_CLERK | 55700 60 | IT_PROG | 4200 50 | ST_MAN | 36400 60 | IT_PROG | 4800 60 | IT_PROG | 28800 60 | IT_PROG | 4800 70 | PR_REP | 10000 60 | IT_PROG | 6000 80 | SA_MAN | 61000 100 | FI_ACCOUNT | 7700 (20 rows) 100 | FI_ACCOUNT | 6900 100 | FI_ACCOUNT | 9000 Promedio del salario por cada 100 | FI_ACCOUNT | 8200 100 | FI_ACCOUNT | 7800 departamento y por cada empleado 100 | FI_MGR | 12000 del mismo cargo y departamento (107 rows) L -- 16 L 16
  • 17. Usando la cláusula GROUP BY con múltiples columnas SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ORDER BY department_id; department_id | job_id | sum ---------------+------------+-------- 10 | AD_ASST | 4400 20 | MK_MAN | 13000 20 | MK_REP | 6000 30 | PU_CLERK | 13900 30 | PU_MAN | 11000 40 | HR_REP | 6500 50 | SH_CLERK | 64300 50 | ST_CLERK | 55700 50 | ST_MAN | 36400 60 | IT_PROG | 28800 70 | PR_REP | 10000 80 | SA_MAN | 61000 (20 rows) L -- 17 L 17
  • 18. Consultas mal escritas usando las funciones de grupo Toda columna o expresión que no se encuentra dentro de una función de grupo, debe estar dentro de la cláusula GROUP BY. SELECT department_id, SUM(salary) FROM employees; ERROR: column quot;employees.department_idquot; must appear in the GROUP BY clause or be used in an aggregate function L -- 18 L 18
  • 19. Consultas mal escritas usando las funciones de grupo • No se puede usar condiciones en la cláusula WHERE para restringir grupos. • Use la cláusula HAVING para restringir los grupos. • No use las funciones de grupo dentro de la cláusula WHERE. SELECT department_id, job_id, AVG(salary) FROM employees WHERE AVG(salary) > 1000 GROUP BY department_id, job_id ORDER BY department_id; ERROR: aggregates not allowed in WHERE clause L -- 19 L 19
  • 20. Restringiendo el resultado de los grupo con la cláusula HAVING • Filtra por registros agrupados. • Muestra la coincidencia definida en la cláusula HAVING. SELECT [ column ], group_function(column) [, ...] FROM from_item [WHERE condition] [GROUP BY column] [HAVING condition [, ...]] [ORDER BY column]; L -- 20 L 20
  • 21. Usando la cláusula HAVING SELECT department_id, MAX(salary) FROM employees GROUP BY department_id HAVING MAX(salary) > 10000; department_id | max ---------------+------- 110 | 12000 100 | 12000 90 | 24000 80 | 14000 30 | 11000 20 | 13000 (6 rows) L -- 21 L 21
  • 22. Usando la cláusula HAVING SELECT job_id, SUM(salary) AS quot;PAYROLL“ FROM employees WHERE job_id NOT LIKE '%REP%‘ GROUP BY job_id HAVING SUM(salary) > 13000 ORDER BY SUM(salary); job_id | PAYROLL ------------+--------- PU_CLERK | 13900 AD_PRES | 24000 IT_PROG | 28800 AD_VP | 34000 ST_MAN | 36400 FI_ACCOUNT | 39600 ST_CLERK | 55700 SA_MAN | 61000 SH_CLERK | 64300 (9 rows) L -- 22 L 22
  • 23. Funcione jerárquicas de grupo No se puede usar las funciones de grupo en modo jerárquico. SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id; ERROR: aggregate function calls may not be nested L -- 23 L 23
  • 24. Resumen En esta lección, usted aprendió como: • Usar las funciones básicas de grupo en SQL. – COUNT – MAX – MIN – AVG • Escribir consultas usando la cláusula GROUP BY. • Escribir consultas usando la cláusula HAVING. L -- 24 L 24