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

Writing Basic SQL SELECT Statements
Writing Basic SQL SELECT StatementsWriting Basic SQL SELECT Statements
Writing Basic SQL SELECT StatementsSalman Memon
 
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Carlos Sierra
 
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?Andrej Pashchenko
 
Optimizing queries MySQL
Optimizing queries MySQLOptimizing queries MySQL
Optimizing queries MySQLGeorgi Sotirov
 
Subqueries -Oracle DataBase
Subqueries -Oracle DataBaseSubqueries -Oracle DataBase
Subqueries -Oracle DataBaseSalman Memon
 
SQL Functions and Operators
SQL Functions and OperatorsSQL Functions and Operators
SQL Functions and OperatorsMohan Kumar.R
 
Oracle db performance tuning
Oracle db performance tuningOracle db performance tuning
Oracle db performance tuningSimon Huang
 
PostgreSQL Performance Tuning
PostgreSQL Performance TuningPostgreSQL Performance Tuning
PostgreSQL Performance Tuningelliando dias
 
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptxFive_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptxMaria Colgan
 
Window functions in MySQL 8.0
Window functions in MySQL 8.0Window functions in MySQL 8.0
Window functions in MySQL 8.0Mydbops
 
DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門Akira Shimosako
 
Tweaking the interactive grid
Tweaking the interactive gridTweaking the interactive grid
Tweaking the interactive gridRoel Hartman
 

Mais procurados (20)

Writing Basic SQL SELECT Statements
Writing Basic SQL SELECT StatementsWriting Basic SQL SELECT Statements
Writing Basic SQL SELECT Statements
 
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
 
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?
 
Optimizing queries MySQL
Optimizing queries MySQLOptimizing queries MySQL
Optimizing queries MySQL
 
Subqueries -Oracle DataBase
Subqueries -Oracle DataBaseSubqueries -Oracle DataBase
Subqueries -Oracle DataBase
 
Cursors in MySQL
Cursors in MySQL Cursors in MySQL
Cursors in MySQL
 
SQL Functions and Operators
SQL Functions and OperatorsSQL Functions and Operators
SQL Functions and Operators
 
Oracle db performance tuning
Oracle db performance tuningOracle db performance tuning
Oracle db performance tuning
 
PostgreSQL Performance Tuning
PostgreSQL Performance TuningPostgreSQL Performance Tuning
PostgreSQL Performance Tuning
 
Oracle Database View
Oracle Database ViewOracle Database View
Oracle Database View
 
MySQL Cursors
MySQL CursorsMySQL Cursors
MySQL Cursors
 
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptxFive_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
 
SQLd360
SQLd360SQLd360
SQLd360
 
Window functions in MySQL 8.0
Window functions in MySQL 8.0Window functions in MySQL 8.0
Window functions in MySQL 8.0
 
DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門DBパフォーマンスチューニングの基礎:インデックス入門
DBパフォーマンスチューニングの基礎:インデックス入門
 
Subqueries
SubqueriesSubqueries
Subqueries
 
Oracle Advanced SQL
Oracle Advanced SQLOracle Advanced SQL
Oracle Advanced SQL
 
Sql subquery
Sql  subquerySql  subquery
Sql subquery
 
Aggregate function
Aggregate functionAggregate function
Aggregate function
 
Tweaking the interactive grid
Tweaking the interactive gridTweaking the interactive grid
Tweaking the interactive grid
 

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 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasPostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasNicola 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 (20)

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 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasPostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - Subconsultas
 
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

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
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 JUNITMaricarmen Sánchez Ruiz
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 

Último (12)

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

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