SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Autor: Nicola Strappazzon C.
                 e-mail: nicola51980@gmail.com




                                                                         4
                 Blog: http://www.swapbytes.com/
                 Revisión: 17/11/11




 Lección
         Usando funciones para
        manipular grupos de datos


Este material se encuentra basado en el curso de Fundamentos a SQL de ORACLE, el cual es adaptado para
el producto PostgreSQL, todos los ejemplos, códigos fuentes y la Base de Datos HR es propiedad de ORACLE.
Objetivos

Al completar esta lección usted podrá entender 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 --
L
?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
              80 |   9000
                                         max
              80 |   8000               -------
              80 |   7500                24000
              80 |   7000
              80 | 10000                (1 row)
              80 |   9500
              80 |   9000
              80 |   8000            Salario mas alto de
              80 |   7500
              80 |   7000            la tabla employees.
              80 | 10500
  (107 rows)



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




L --
L
Sintaxis Básica

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




L --
L
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 --
L
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 --
L
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 --
L
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 --
L
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 --
L
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 --
L
Creando grupo de datos
   department_id | salary
  ---------------+--------
              10 |   4400
              20 | 13000
              20 |   6000
              30 |   3100
              30 | 11000      department_id |          avg
              30 |   2500    ---------------+------------------------
              30 |   2900                10 | 4400.0000000000000000
              40 |   6500
              50 |   2500
                                         20 | 9500.0000000000000000
              50 |   8000                30 | 4150.0000000000000000
              50 |   8200                40 | 6500.0000000000000000
              60 |   6000                50 | 3475.5555555555555556
              60 |   9000                60 | 5760.0000000000000000
              70 | 10000                 70 | 10000.0000000000000000
              80 |   9500                80 | 8955.8823529411764706
              80 |   9000
              80 |   8000
                                         90 |     19333.333333333333
              90 | 24000                100 | 8600.0000000000000000
              90 | 17000                110 | 10150.0000000000000000
              90 | 17000                    | 7000.0000000000000000
             100 |   6900    (12 rows)
             100 |   9000
             100 | 12000
             110 |   8300         Promedio del salario por cada
             110 | 12000
  (107 rows)
                              departamento y por cada empleado del
                                      mismo departamento
L --
L
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 --
L
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 --
L
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 --
L
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
            30 | PU_CLERK   |   2900     department_id |   job_id   | sum
            50 | SH_CLERK   |   3800    ---------------+------------+--------
            50 | SH_CLERK   |   3000                10 | AD_ASST    |   4400
            50 | SH_CLERK   |   3400                20 | MK_MAN     | 13000
            50 | SH_CLERK   |   4100                20 | MK_REP     |   6000
            50 | SH_CLERK   |   4200                30 | PU_CLERK   | 13900
            50 | SH_CLERK   |   2800                30 | PU_MAN     | 11000
            50 | SH_CLERK   |   2500                40 | HR_REP     |   6500
            60 | IT_PROG    |   9000                50 | SH_CLERK   | 64300
            60 | IT_PROG    |   4200                50 | ST_CLERK   | 55700
            60 | IT_PROG    |   4800                50 | ST_MAN     | 36400
            60 | IT_PROG    |   4800                60 | IT_PROG    | 28800
            60 | IT_PROG    |   6000                70 | PR_REP     | 10000
           100 | FI_ACCOUNT |   7700                80 | SA_MAN     | 61000
           100 | FI_ACCOUNT |   6900    (20 rows)
           100 | FI_ACCOUNT |   9000
           100 | FI_ACCOUNT |   8200
           100 | FI_ACCOUNT |   7800
                                          Promedio del salario por cada
           100 | FI_MGR     | 12000     departamento y por cada empleado
(107 rows)
                                         del mismo cargo y departamento

 L --
 L
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 --
L
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 "employees.department_id" must appear in the GROUP
BY clause or be used in an aggregate function




L --
L
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 --
L
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 --
L
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 --
L
Usando la cláusula HAVING

SELECT     job_id, SUM(salary) AS "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 --
L
Funciones 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 --
L
Resumen
En esta lección, usted debió entender como:
• Usar las funciones básicas de grupo en SQL.
   – SUM
   – COUNT
   – MAX
   – MIN
   – AVG
• Escribir consultas usando la cláusula GROUP BY.
• Escribir consultas usando la cláusula HAVING.




L --
L

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

DML Commands
DML CommandsDML Commands
DML Commands
 
Basic Sql Handouts
Basic Sql HandoutsBasic Sql Handouts
Basic Sql Handouts
 
80 different SQL Queries with output
80 different SQL Queries with output80 different SQL Queries with output
80 different SQL Queries with output
 
Top 40 sql queries for testers
Top 40 sql queries for testersTop 40 sql queries for testers
Top 40 sql queries for testers
 
Aggregate functions
Aggregate functionsAggregate functions
Aggregate functions
 
05 Creating Stored Procedures
05 Creating Stored Procedures05 Creating Stored Procedures
05 Creating Stored Procedures
 
SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?
 
PostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasPostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - Subconsultas
 
Using the set operators
Using the set operatorsUsing the set operators
Using the set operators
 
Sql task
Sql taskSql task
Sql task
 
SQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics CoveredSQL Complete Tutorial. All Topics Covered
SQL Complete Tutorial. All Topics Covered
 
Mysql
MysqlMysql
Mysql
 
SQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question BankSQL-RDBMS Queries and Question Bank
SQL-RDBMS Queries and Question Bank
 
User defined Function in SQL
User defined Function in SQLUser defined Function in SQL
User defined Function in SQL
 
SQL practice questions set - 2
SQL practice questions set - 2SQL practice questions set - 2
SQL practice questions set - 2
 
1 z0 047
1 z0 0471 z0 047
1 z0 047
 
MySQL Views
MySQL ViewsMySQL Views
MySQL Views
 
Les05 (Displaying Data from Multiple Table)
Les05 (Displaying Data from Multiple Table)Les05 (Displaying Data from Multiple Table)
Les05 (Displaying Data from Multiple Table)
 
Complex queries in sql
Complex queries in sqlComplex queries in sql
Complex queries in sql
 
Sql subquery
Sql  subquerySql  subquery
Sql subquery
 

Semelhante a PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos

PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesPostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesNicola Strappazzon C.
 
PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoNicola Strappazzon C.
 
Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)José Toro
 
Ingeniería de Métodos de Trabajo 4/4
Ingeniería de Métodos de Trabajo 4/4Ingeniería de Métodos de Trabajo 4/4
Ingeniería de Métodos de Trabajo 4/4CEMEX
 
Tabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundaria
Tabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundariaTabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundaria
Tabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundariaCiriloOlivaresValenc
 
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ónYilbert Martinez
 
Funciones numéricas, de fecha y hora en MySQL
Funciones numéricas,  de fecha y hora en MySQLFunciones numéricas,  de fecha y hora en MySQL
Funciones numéricas, de fecha y hora en MySQLIng-D-SW-TorresKhano--ME
 
Teorico palabras reservada
Teorico palabras reservadaTeorico palabras reservada
Teorico palabras reservadamalaclau
 
Punto de equilibro
Punto de equilibro Punto de equilibro
Punto de equilibro gemorillore
 

Semelhante a PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos (19)

Postgre S Q L 4
Postgre S Q L 4Postgre S Q L 4
Postgre S Q L 4
 
PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y TransaccionesPostgreSQL - Lección 8 - Manipulando Datos y Transacciones
PostgreSQL - Lección 8 - Manipulando Datos y Transacciones
 
PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjunto
 
CONSULTAS BASICAS
CONSULTAS BASICASCONSULTAS BASICAS
CONSULTAS BASICAS
 
Transact+Sql+2005
Transact+Sql+2005Transact+Sql+2005
Transact+Sql+2005
 
Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)
 
Evidencias del aprendizaje
Evidencias del aprendizajeEvidencias del aprendizaje
Evidencias del aprendizaje
 
Ingeniería de Métodos de Trabajo 4/4
Ingeniería de Métodos de Trabajo 4/4Ingeniería de Métodos de Trabajo 4/4
Ingeniería de Métodos de Trabajo 4/4
 
Tabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundaria
Tabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundariaTabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundaria
Tabla de-frecuencias-de-una-variable-continua-para-tercer-grado-de-secundaria
 
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
 
Funciones numéricas, de fecha y hora en MySQL
Funciones numéricas,  de fecha y hora en MySQLFunciones numéricas,  de fecha y hora en MySQL
Funciones numéricas, de fecha y hora en MySQL
 
Sentencias my sql
Sentencias my sqlSentencias my sql
Sentencias my sql
 
Sql2
Sql2Sql2
Sql2
 
Teorico palabras reservada
Teorico palabras reservadaTeorico palabras reservada
Teorico palabras reservada
 
Sql2
Sql2Sql2
Sql2
 
Consultas en SQL
Consultas en SQLConsultas en SQL
Consultas en SQL
 
Ayudantia 5 RESPUESTAS
Ayudantia 5 RESPUESTASAyudantia 5 RESPUESTAS
Ayudantia 5 RESPUESTAS
 
Punto de equilibro
Punto de equilibro Punto de equilibro
Punto de equilibro
 
Lab5 sql
Lab5 sqlLab5 sql
Lab5 sql
 

Último

innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blogManuel Diaz
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docxssusere34b451
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosYOMIRAVILLARREAL1
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...dramosbrise1403
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaRicardoEstrada90
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024NicolleAndrade7
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónUniversidad de Sonora
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxJOELGARCIA849853
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .itzyrivera61103
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxdoloresolmosantiago
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónAntonia Yamilet Perez Palomares
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaEdwinGarca59
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptxjarniel1
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.241534381
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx221112876
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialEducática
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC6dwwcgtpfx
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).jcaballerosamayoa
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALGuadalinfoHuscarGuad
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxCsarNlsonMrquezContr
 

Último (20)

innovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 bloginnovacion banking & warehouse 2024 blog
innovacion banking & warehouse 2024 blog
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024Ejercicio 1 periodo 2 de Tecnología 2024
Ejercicio 1 periodo 2 de Tecnología 2024
 
Imágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la informaciónImágenes digitales: Calidad de la información
Imágenes digitales: Calidad de la información
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
Electricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docxElectricidad Libro compendio de temas estudiados.docx
Electricidad Libro compendio de temas estudiados.docx
 

PostgreSQL - Lección 4 - Usando funciones para manipular grupos de datos

  • 1. Autor: Nicola Strappazzon C. e-mail: nicola51980@gmail.com 4 Blog: http://www.swapbytes.com/ Revisión: 17/11/11 Lección Usando funciones para manipular grupos de datos Este material se encuentra basado en el curso de Fundamentos a SQL de ORACLE, el cual es adaptado para el producto PostgreSQL, todos los ejemplos, códigos fuentes y la Base de Datos HR es propiedad de ORACLE.
  • 2. Objetivos Al completar esta lección usted podrá entender 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 -- L
  • 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 80 | 9000 max 80 | 8000 ------- 80 | 7500 24000 80 | 7000 80 | 10000 (1 row) 80 | 9500 80 | 9000 80 | 8000 Salario mas alto de 80 | 7500 80 | 7000 la tabla employees. 80 | 10500 (107 rows) L -- L
  • 4. Funciones de grupo Funciones básicas que realizan operaciones a un grupo de registros en especifico: • AVG • COUNT • MAX • MIN • SUM L -- L
  • 5. Sintaxis Básica SELECT [ column ], group_function(column) [, ...] FROM from_item [WHERE condition] [GROUP BY column] [ORDER BY column]; L -- L
  • 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 -- L
  • 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 -- L
  • 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 -- L
  • 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 -- L
  • 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 -- L
  • 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 -- L
  • 12. Creando grupo de datos department_id | salary ---------------+-------- 10 | 4400 20 | 13000 20 | 6000 30 | 3100 30 | 11000 department_id | avg 30 | 2500 ---------------+------------------------ 30 | 2900 10 | 4400.0000000000000000 40 | 6500 50 | 2500 20 | 9500.0000000000000000 50 | 8000 30 | 4150.0000000000000000 50 | 8200 40 | 6500.0000000000000000 60 | 6000 50 | 3475.5555555555555556 60 | 9000 60 | 5760.0000000000000000 70 | 10000 70 | 10000.0000000000000000 80 | 9500 80 | 8955.8823529411764706 80 | 9000 80 | 8000 90 | 19333.333333333333 90 | 24000 100 | 8600.0000000000000000 90 | 17000 110 | 10150.0000000000000000 90 | 17000 | 7000.0000000000000000 100 | 6900 (12 rows) 100 | 9000 100 | 12000 110 | 8300 Promedio del salario por cada 110 | 12000 (107 rows) departamento y por cada empleado del mismo departamento L -- L
  • 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 -- L
  • 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 -- L
  • 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 -- L
  • 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 30 | PU_CLERK | 2900 department_id | job_id | sum 50 | SH_CLERK | 3800 ---------------+------------+-------- 50 | SH_CLERK | 3000 10 | AD_ASST | 4400 50 | SH_CLERK | 3400 20 | MK_MAN | 13000 50 | SH_CLERK | 4100 20 | MK_REP | 6000 50 | SH_CLERK | 4200 30 | PU_CLERK | 13900 50 | SH_CLERK | 2800 30 | PU_MAN | 11000 50 | SH_CLERK | 2500 40 | HR_REP | 6500 60 | IT_PROG | 9000 50 | SH_CLERK | 64300 60 | IT_PROG | 4200 50 | ST_CLERK | 55700 60 | IT_PROG | 4800 50 | ST_MAN | 36400 60 | IT_PROG | 4800 60 | IT_PROG | 28800 60 | IT_PROG | 6000 70 | PR_REP | 10000 100 | FI_ACCOUNT | 7700 80 | SA_MAN | 61000 100 | FI_ACCOUNT | 6900 (20 rows) 100 | FI_ACCOUNT | 9000 100 | FI_ACCOUNT | 8200 100 | FI_ACCOUNT | 7800 Promedio del salario por cada 100 | FI_MGR | 12000 departamento y por cada empleado (107 rows) del mismo cargo y departamento L -- L
  • 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 -- L
  • 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 "employees.department_id" must appear in the GROUP BY clause or be used in an aggregate function L -- L
  • 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 -- L
  • 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 -- L
  • 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 -- L
  • 22. Usando la cláusula HAVING SELECT job_id, SUM(salary) AS "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 -- L
  • 23. Funciones 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 -- L
  • 24. Resumen En esta lección, usted debió entender como: • Usar las funciones básicas de grupo en SQL. – SUM – COUNT – MAX – MIN – AVG • Escribir consultas usando la cláusula GROUP BY. • Escribir consultas usando la cláusula HAVING. L -- L