SlideShare una empresa de Scribd logo
Facultad Politécnica Base de Datos II 1
Facultad Politécnica Base de Datos II 2
Cláusula GROUP BY y HAVING Declaración de
SELECT : Sintaxis
 Las funciones de grupo operan sobre conjuntos de filas para dar un
resultado por cada grupo
 Las funciones de grupo pueden utilizarse tanto en la sentencia SELECT
como en la sentencia HAVING.
 GROUP BY divide filas en los grupos más pequeños.
 HAVING restringe el resultado (condición)
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Facultad Politécnica Base de Datos II 3
Funciones de Grupo
AVG (DISTINCT | ALL|n) Valor promedio de n, ignorando valores nulos
COUNT (DISTINCT |ALL| expr|*) Nº de filas. Con * cuenta todas, incluyendo
nulos
MAX (DISTINCT | ALL| expr) Máximo valor de la expresión
MIN (DISTINCT | ALL | expr) Mínimo valor de la expresión
STDDEV (DISTINCT | ALL|n) Desviación estándar (ignora nulos)
SUM (DISTINCT | ALL|n) Suma valores. Ignora nulos
VARIANCE (DISTINCT | ALL|n) Varianza. Ignora nulos
Facultad Politécnica Base de Datos II 4
Funciones de GRUPO
• MAX y MIN pueden utilizarse para cualquier tipo de dato.
SQL> SELECT MIN(apellido), MAX(apellido)
2 FROM b_personas
3 WHERE ES_CLIENTE = 'S';
SQL> SELECT SUM(MONTO_TOTAL), AVG(MONTO_TOTAL),
2 MIN(MONTO_TOTAL), MAX(MONTO_TOTAL)
3 FROM B_VENTAS
4* WHERE ID_CLIENTE = 2;
• Se puede usar AVG y SUM con columnas que guardan datos numéricos
exclusivamente.
Facultad Politécnica Base de Datos II 5
Función COUNT : Ejemplos
• COUNT (*) retorna el número de filas en una
tabla.
SQL> SELECT COUNT(*)
2 FROM b_posicion_actual
3 WHERE id_area = 12;
SQL> SELECT COUNT(RUC)
2 FROM b_personas
3 WHERE ES_CLIENTE = 'S';
• COUNT(expr) retorna el número de filas no-nulas.
Facultad Politécnica Base de Datos II 6
La cláusula GROUP BY
Sintaxis
• Divide filas en una tabla en los grupos más pequeños
usando la cláusula GROUP BY.
• La misma lista de columnas que se utilizan en la
cláusula SELECT, deben ser utilizadas en la cláusula
GROUP BY
• Defina el orden predefinido usando ORDER BY.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Facultad Politécnica Base de Datos II 7
Sin la cláusula GROUP BY
ID APELLIDO ID_LOCALIDAD
--- -------------- ------------
5 BRIZUELA CUEVAS 12
6 ACHUCARRO 12
7 12
La localidad 12 se despliega
tres veces porque está
asignado a 3 clientes
SQL> SELECT id, apellido, id_localidad
2 FROM b_personas
3 WHERE id_localidad = 12
4 AND es_cliente= 'S';
Facultad Politécnica Base de Datos II 8
Con la cláusula GROUP BY
Group By: despliega una línea de
datos para cada grupo recuperado
por la cláusula WHERE, y
COUNT (*). En este caso
corresponde al número de clientes
de la localidad 12.
SQL> SELECT id_localidad, count(*) Cantidad
2 FROM b_personas
3 WHERE id_localidad = 12
4 AND es_cliente= 'S'
5 GROUP BY id_localidad;
ID_LOCALIDAD CANTIDAD
------------ --------
12 3
Facultad Politécnica Base de Datos II 9
GROUP BY : Ejemplos
• Despliegue los diferentes tipos de personas y la cantidad
por cada tipo
SQL> SELECT tipo_persona, COUNT(*) Cantidad
2 FROM b_personas
3 GROUP BY tipo_persona;
SQL> SELECT p.cod_categoria, COUNT(p.cedula)
2 FROM B_POSICION_ACTUAL p
3 WHERE fecha_fin IS NULL
4 GROUP BY p.Cod_Categoria;
• Determine todas las categorías salariales ocupadas, la
cantidad de empleados que poseen dichas categorías
Facultad Politécnica Base de Datos II 10
SQL> SELECT p.cod_categoria CAT, COUNT(p.cedula) Cantid
2 FROM B_POSICION_ACTUAL p
3 WHERE fecha_fin IS NULL
4 GROUP BY p.Cod_Categoria
5 HAVING COUNT(p.cedula) > 1;
Desplegando Grupos específicos usando
la cláusula HAVING
CAT CANTID
--- --------
42 2
43 2
48 2
49 2
56 3
66 2
La cláusula HAVING
condiciona los
grupos
Sólo se despliegan
aquellas
categorías que
tienen más de 1
empleado
Facultad Politécnica Base de Datos II 11
La cláusula HAVING: Sintaxis
Use la cláusula HAVING para restringir grupos.
 Paso 1: Se agrupan filas.
 Paso 2: Se aplica la función de grupo.
 Paso 3: Se despliegan los grupos que cumplen
con la condición del HAVING.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Facultad Politécnica Base de Datos II 12
Errores que no deben cometerse:
Todas las columnas citadas en el SELECT que
sean parte de la función agregada DEBEN
estar en la cláusula GROUP BY, pues de lo
contrario, dará un mensaje de error
La cláusula WHERE no puede utilizarse para
condicionar grupos.
Facultad Politécnica Base de Datos II 13
SUBQUERIES
Facultad Politécnica Base de Datos II 14
• Una Subconsulta (subquery) es una sentencia SELECT
‘embebida’ en otra sentencia SQL.
• Son muy útiles cuando se trata de seleccionar filas de una tabla
con una condición que depende de la tabla en sí.
• Se puede usar subqueries en SQL con las cláusulas:
 WHERE (QUERY ANIDADO)
 HAVING
 FROM (INLINE VIEWS)
 FROM (para seleccionar las filas en un sentencia CREATE
o INSERT)
LAS SUBCONSULTAS
Facultad Politécnica Base de Datos II 15
Formato del Sub
query
SELECT Syntax
SELECT...
FROM...
WHERE... Sintaxis de otro SELECT
(SELECT...
FROM...
WHERE...)
;
Query
Principal
Subquery
Facultad Politécnica Base de Datos II 16
Ejemplo de la subconsulta: Seleccionar los empleados
que tienen el mismo jefe que “Ferreira”
B_EMPLEADOS B_EMPLEADOS
Servidor
APELLIDO CEDULA_JEFE
Ferreira 952160
Moreno 952160
Gonzalez 952160
Caballero 952160
Balmaceda 952160
CEDULA_JEFE
952160
Facultad Politécnica Base de Datos II 17
Ejemplo de la subconsulta
SQL> SELECT NOMBRE, APELLIDO, CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)= 'FERREIRA');
Seleccionar los empleados que tienen el mismo jefe que
“Ferreira”
Facultad Politécnica Base de Datos II 18
SINTAXIS DE LAS SUB CONSULTAS
• El subquery se ejecuta una vez antes del Query
principal.
• El resultado del subquery es usado por el
Query exterior principal.
SELECT lista de columnas
FROM tabla
WHERE expresión Operador
(SELECT lista de columnas
FROM tabla);
Facultad Politécnica Base de Datos II 19
Indicaciones para los subqueries:
 La subconsulta debe aparecer entre paréntesis
 Se pueden utilizar subconsultas con operadores
de comparasión de una sola fila ( >, =, >=, <,
<>, <= ) y de MÚLTIPLES FILAS ( IN, NOT
IN).
 La subconsulta debe aparecer en el lado derecho
del operador
 NO PUEDEN TENER la cláusula ORDER BY.
Facultad Politécnica Base de Datos II 20
¿Cómo se procesan las consultas
anidadas?
Query anidado Query Principal
1. La declaración SELECT anidada se ejecuta primero.
2. El resultado se pasa en la condición de pregunta
principal.
SELECT NOMBRE, APELLIDO,
CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE =
(SELECT CEDULA_JEFE
FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)=
'FERREIRA')
Retorna cedula_jefe= 952160
Facultad Politécnica Base de Datos II 21
Consultas de una sola fila
Escriba la declaración
de SQL para desplegar
el nombre y apellido
del empleado.
Ponga ambas
declaraciones
y deje que el SQL
determine el valor de
comparación
SELECT CEDULA_JEFE FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)=
'FERREIRA'
SELECT NOMBRE, APELLIDO,
CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE =
Escriba la consulta
para averiguar el jefe
de Ferreira
SELECT NOMBRE, APELLIDO,
CEDULA_JEFE
FROM B_EMPLEADOS
WHERE CEDULA_JEFE =
(SELECT CEDULA_JEFE FROM
B_EMPLEADOS
WHERE UPPER(APELLIDO)=
'FERREIRA')
Facultad Politécnica Base de Datos II 22
SQL> SELECT nombre, costo
2 FROM b_articulos
3 WHERE costo < (SELECT AVG(costo)
4 FROM b_articulos)
5 ORDER by costo DESC;
Ejemplo de la utilización de funciones
de grupo en la subconsulta
Seleccionar el nombre y costo de los artículos cuyo
costo está por debajo del promedio.
Facultad Politécnica Base de Datos II 23
Utilización de funciones de grupo en
una subconsulta
NOMBRE COSTO
Porta utensilios Cheff 59848
Mantel Cadence 140x250 52273
Almohada Plumi 50x70 Altenburg 52273
Florero 31x15cm 30227
Figura decorativa Buho 25758
Toalla Felpa Hilo Egipcio 18864
Bandeja redonda 12" 18864
Servido
r
AVG(COSTO)
72145,90625
Artículos cuyo costo está por debajo del promedio
Subquery escalar
Un subquery escalar es aquel que retorna
exactamente una columna de una fila
De allí que el subquery escalar puede
utilizarse en expresiones tales como
 DECODE y CASE
 Todas las cláusulas de SELECT, con excepción
de GROUP BY
Ejemplo de uso de un subquery escalar en el
CASE:
select nombre_cta,
(CASE
WHEN id_tipo = (SELECT id FROM b_tipo_cuenta
WHERE nombre_categoria
=('ACTIVO'))
THEN 'ACTIVO'
ELSE
'Otra clasificación'
END) Clasificación
FROM b_cuentas;
Facultad Politécnica Base de Datos II 26
Errores con Subqueries
 Si se escribe un subquery que devuelve más de una fila y se usa un
operador de comparación de fila, la sentencia dará error.
SQL> SELECT nombre, apellido
FROM b_personas
WHERE id_localidad =
(SELECT id FROM b_localidad
WHERE UPPER(nombre) LIKE 'CAA%');
ERROR en línea 4:
ORA-01427: la subconsulta de una sola fila
devuelve más de una fila
 Para corregir el error, cambie al operador de la
comparación a IN, un operador de la fila múltiple.
Facultad Politécnica Base de Datos II 27
Ejemplo de subconsultas que
retornan múltiples filas
 Un subquery de filas múltiples devuelve más de 1
fila.
 Usted debe usar a un operador de la fila múltiple
en la cláusula WHERE, por ejemplo el operador IN.
SQL> SELECT nombre, apellido, id_localidad
FROM b_personas
WHERE id_localidad IN
(SELECT id FROM b_localidad
WHERE UPPER(nombre) LIKE 'CAA%');
Facultad Politécnica Base de Datos II 28
Utilización de cláusula HAVING en
una SUBCONSULTA
• También se puede utilizar una subconsulta en la
cláusula HAVING
• Siempre se ejecuta primeramente la SUBCONSULTA y
retorna el resultado a la cláusula HAVING de la
consulta principal
SQL> SELECT CEDULA_VENDEDOR, AVG(MONTO_TOTAL)COSTO
FROM B_VENTAS
GROUP BY CEDULA_VENDEDOR
HAVING AVG(MONTO_TOTAL) <
(SELECT AVG(MONTO_TOTAL) FROM B_VENTAS);
Facultad Politécnica Base de Datos II 29
Subqueries con múltiples
columnas
Se pueden comparar más de una columna, para ello la sintaxis
es la siguiente:
SELECT columna, columna, ...
FROM tabla
WHERE (columna, columna, ...) IN
(SELECT columna, columna, ...
FROM tabla
WHERE condición)
Consultas correlacionadas
 Un subquery correlacionado es aquel que contiene una
referencia a una tabla que aparece el query exterior
(query principal). La sintaxis es la siguiente:
SELECT columna1, columna2, ...
FROM tabla1 alias_tab1
WHERE columna1 <operador>
(SELECT columna1
FROM tabla2
WHERE expresion1 =
alias_tab1.expresion2);
Facultad Politécnica Base de Datos II 31
Uso del operador EXISTS en consultas
correlacionadas
 El operador EXISTS verifica la existencia de filas en el
conjunto resultante del subquery
 Si se encuentra la fila, la búsqueda ya no continúa y se
retorna TRUE.
 Ejemplo: Seleccionar todos los empleados que tienen al
menos un empleado que depende de él
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE EXISTS (SELECT 'X'
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = E.CEDULA);
Facultad Politécnica Base de Datos II 32
EXISTS vs IN
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE EXISTS (SELECT 'X'
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = E.CEDULA);
Tomando el mismo ejemplo: Seleccionar todos los empleados que tienen al
menos un empleado que depende de él (Es decir, que son jefes):
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE CEDULA IN (SELECT CEDULA_JEFE
FROM B_EMPLEADOS);
Si bien generan el mismo resultado, se procesan de modo diferente. EXISTS
puede ser más eficiente si el Subquery tien muchos datos.
Facultad Politécnica Base de Datos II 33
NOT EXISTS vs NOT IN
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE NOT EXISTS (SELECT 'X'
FROM B_EMPLEADOS
WHERE CEDULA_JEFE = E.CEDULA);
Aunque pareciera que son equivalents puede que no generen el mismo
resultado.
Ej: Ver todos los empleados que no son jefes.
SELECT CEDULA, NOMBRE FROM
B_EMPLEADOS E
WHERE CEDULA NOT IN (SELECT CEDULA_JEFE
FROM B_EMPLEADOS);
Verifique el resultado, debido a la presencia de valores NULL en el subquery!
Facultad Politécnica Base de Datos II 34
INLINEVIEWS (Vistas Inlines)
 Un sub query en la cláusula FROM es llamada vista inline, ya
que el sub query representa virtualmente una vista.
SELECT lista_de_campos
FROM <subconsulta>;
SELECT CLIENTE, MONTO_VENTAS
FROM
(SELECT ID_CLIENTE CLIENTE, SUM(MONTO_TOTAL)
MONTO_VENTAS
FROM B_VENTAS
GROUP BY ID_CLIENTE) V
/
Facultad Politécnica Base de Datos II 35
Uso de la cláusula WITH
 Mediante la cláusula WITH, puede definir un bloque de consulta
antes de utilizarlo en una consulta. La cláusula WITH (conocida
formalmente como subquery_factoring_clause) le permite
reutilizar el mismo bloque de consulta en una sentencia SELECT
cuando se produce más de una vez dentro de una consulta
compleja.
 Esto resulta particularmente útil cuando una consulta tiene
muchas referencias al mismo bloque de consulta y hay presentes
uniones y agregaciones.
Ejemplo:Ver el id, nombre y cantidad del artículo más vendido
Facultad Politécnica Base de Datos II 36
Ejemplo sin la cláusula WITH
SELECT v.id_articulo, a.nombre, SUM(v.cantidad)
cantidad
FROM b_detalle_ventas v JOIN b_articulos a
ON a.id = v.id_articulo
GROUP BY v.id_articulo, a.nombre
HAVING SUM(v.cantidad) =
(SELECT MAX(v.cantidad) maximo
FROM
(SELECT v.id_articulo, a.nombre, SUM(v.cantidad)
cantidad
FROM b_detalle_ventas v JOIN b_articulos a
ON a.id = v.id_articulo
GROUP BY v.id_articulo, a.nombre) v);
Facultad Politécnica Base de Datos II 37
Ejemplo con el uso de la cláusula
WITH
WITH sum_ven AS
(SELECT v.id_articulo, a.nombre, SUM(v.cantidad)
cantidad
FROM b_detalle_ventas v JOIN b_articulos a
ON a.id = v.id_articulo
GROUP BY v.id_articulo, a.nombre)
SELECT v.id_articulo, v.nombre, v.cantidad
FROM sum_ven v
WHERE v.cantidad =
(SELECT MAX(v.cantidad) maximo
FROM sum_ven v);
Facultad Politécnica Base de Datos II 38
QUERIES JERÁRQUICOS
Si la tabla contiene datos organizados
jerárquicamente, es posible recuperar los datos en
orden jerárquico utilizando la cláusula
jerárquica:
START WITH <condición>
CONNECT BY <condición>
Facultad Politécnica Base de Datos II 39
La cláusula jerárquica
 Permite listar los datos reflejando la ramificación de
los datos cuando éstos están estructurados en
orden jerárquico
 El primer elemento de una jerarquía se llama nodo
raíz. Las ramificaciones son nodos, y el último
elemento de una ramificación es la hoja.
 La cláusula START WITH especifica la fila raíz de la
jerarquía
 La cláusula CONNECT BY es la que permite fijar la
relación de dependencia entre las filas ‘padres’ y las
filas ‘hijas’ dentro de la jerarquía
 PRIOR se refiere al sentido del recorrido
Ejemplo de Estructura de árbol en la
tabla b_cuentas
Codigo_cta = 1000000 ACTIVO (padre)
1100000 Activo Corriente 1200000 Activo Fijo 1300000 Inventario de
Mercaderías
1110000
Caja
1120000
Bancos
1130000
Cuentas por cobrar
Recuerde:
 El recorrido del árbol (Top Down o Bottom Up)
depende de la cláusula PRIOR:
Ver la cuenta de ACTIVO (1000000) y las que dependen de ella
SELECT codigo_cta,nombre_cta
FROM b_cuentas
start with codigo_cta = 1000000
connect BY PRIOR codigo_cta =
cta_superior;
Ver las cuentas superiores a la cuenta 1130000:
SELECT codigo_cta,nombre_cta
FROM b_cuentas
start with codigo_cta = 1130000
connect BY codigo_cta = PRIOR
cta_superior;
 Para mostrar la jerarquía en los datos
recuperados:
SELECT LPAD(' ',2*(LEVEL-1))||
TO_CHAR(codigo_cta,'0000000') codigo_cta,
nombre_cta
FROM b_cuentas
start with codigo_cta = 1000000
connect BY PRIOR codigo_cta = cta_superior;
CODIGO_CTA NOMBRE_CTA
-------------------- ----------------------------------------
1000000 ACTIVO
1100000 ACTIVO CORRIENTE
1110000 CAJA
1110100 CAJA CHICA
1120000 BANCOS
1120100 Cta. Cte. 386881 Banco ITAU
1120200 Cta.Cte. 504 Banco Nacional de Fomento
1130000 Cuentas por cobrar CLIENTES
1130100 Cadena Hiperseis
1130200 Supermercado STOCK
1130300 Supermercado Gran Vía
1200000 ACTIVO FIJO
1210000 Rodados
1220000 Inmuebles
1300000 INVENTARIO MERCADERIAS
1310000 MERCADERIAS

Más contenido relacionado

PPT
Consultas en sql básico
PDF
Guia de ejercicio sql
PPTX
Comandos utilizados en sql
PDF
Ejemplo ddl dml
DOCX
SENTENCIAS DE SQL SERVER
PPT
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
PPT
Sql basico parte_i_
PPT
Sql Consultas MáS Complejas
Consultas en sql básico
Guia de ejercicio sql
Comandos utilizados en sql
Ejemplo ddl dml
SENTENCIAS DE SQL SERVER
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
Sql basico parte_i_
Sql Consultas MáS Complejas

La actualidad más candente (20)

PPT
Sql basico parte_i_
PDF
Comandos mysql
PPTX
Combinacion de consultas y consultas multitablas
DOCX
manejo de sentencias de manipulacion
PPTX
Sentencia select
PPT
SQL-DDL
DOCX
Cuadro de sentencias con descripcion y ejemplo
PPTX
PPT
Bases de Datos Cap VI:SQL: SQL-Definición de datos
DOCX
PPTX
Sql básico - compendio
PDF
Alumno valoracion 1.2 de programacion
PDF
Aprenda SQL Server
PPTX
Consultas sql 2014
PDF
Autorelleno
PDF
Cuadro combinado filtrado microsoft access - todoexpertos.com
PPTX
SQL: DDL, DML y SQL
PDF
Bdii 10 vistas_new
PDF
Sql basico parte_i_
DOC
Diccionario basico de programacion visual basic
Sql basico parte_i_
Comandos mysql
Combinacion de consultas y consultas multitablas
manejo de sentencias de manipulacion
Sentencia select
SQL-DDL
Cuadro de sentencias con descripcion y ejemplo
Bases de Datos Cap VI:SQL: SQL-Definición de datos
Sql básico - compendio
Alumno valoracion 1.2 de programacion
Aprenda SQL Server
Consultas sql 2014
Autorelleno
Cuadro combinado filtrado microsoft access - todoexpertos.com
SQL: DDL, DML y SQL
Bdii 10 vistas_new
Sql basico parte_i_
Diccionario basico de programacion visual basic
Publicidad

Similar a Bdii 06 func_grupo_y_subconsultas (20)

PPTX
Unidad iii dql
PPTX
14 structure query language
PDF
Consultas-SQL.pdf
PDF
Consultas sql
PDF
584307359-S04-s1-Operador-Logico-Clausulas-1.pdf
PDF
Lenguaje estructurado de consulta
PPT
Fundamentos sql
PPTX
Sub consultas
PPTX
PDF
SQL Parte 1.pdf
PDF
SQL Parte 1.pdf
PPTX
Sub consultas
PDF
Lenguaje estructurado de consulta
PPTX
DOCX
Base datos consultasavanzadas-postgres
ODP
T4 Sql 2 Lmd Log
PDF
Introducción a sql server
PDF
Subconsultas sql
Unidad iii dql
14 structure query language
Consultas-SQL.pdf
Consultas sql
584307359-S04-s1-Operador-Logico-Clausulas-1.pdf
Lenguaje estructurado de consulta
Fundamentos sql
Sub consultas
SQL Parte 1.pdf
SQL Parte 1.pdf
Sub consultas
Lenguaje estructurado de consulta
Base datos consultasavanzadas-postgres
T4 Sql 2 Lmd Log
Introducción a sql server
Subconsultas sql
Publicidad

Más de Rody Paredes (6)

PDF
Bdii 26 distribuidas
PDF
Bdii 09 ddl_new
PDF
Bdii 04 sql
DOC
Bd2 ejer02 joins y funciones_solucion
PDF
Macros
PDF
Factura automática
Bdii 26 distribuidas
Bdii 09 ddl_new
Bdii 04 sql
Bd2 ejer02 joins y funciones_solucion
Macros
Factura automática

Último (20)

PDF
Laboratorio#1 Nariz, Boca y Faringe, Subgrupo 1A.pdf
PDF
Rendición_Pública_de_Cuentas_Inicial_2019.pdf
PPTX
Las buenas costumbres en la familiaaaaaaa
PDF
Principios d. Anatomía y no se que más poner jaja
PDF
PROGRAMA CALEB. par la iglesia es un programa
DOCX
Documento sin título.dohdjdksksksksksjjskscx
PPTX
fisioterapia 6 semestre - ---- serealizo
PPTX
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
PDF
Mapa mental de cultura social Historia Economica
PPTX
Diabetes Mellitus, funciones, partes y tipos
PDF
Administracion y contabilidad publica 1era clase
PDF
Riesgos en Negociaciones_comercio exterior.pdf
PPTX
Precio optimo de venta para un emprendimiento familiar
PPTX
DIAPOSITIVA DE TEORIA CRITICA EN EDUCACION - RAMOS ALANIA ANA MARIA.pptx
PPT
TRATA Y TRÁFICO DE PERSONAS defensoría del pueblo
PDF
Proyecto Bootcamp - Entregables y Documentación.pdf
PPTX
La gestión en los servicios de salud.pptx 1.pptx
PPTX
DICTÁMENES MÉDICO-PSIQUIÁTRICOS Y PSICOLÓGICOS FORENSES 6.pptx
PPTX
lareformaprevisional-091013175510-phpapp01.pptx
PPTX
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx
Laboratorio#1 Nariz, Boca y Faringe, Subgrupo 1A.pdf
Rendición_Pública_de_Cuentas_Inicial_2019.pdf
Las buenas costumbres en la familiaaaaaaa
Principios d. Anatomía y no se que más poner jaja
PROGRAMA CALEB. par la iglesia es un programa
Documento sin título.dohdjdksksksksksjjskscx
fisioterapia 6 semestre - ---- serealizo
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
Mapa mental de cultura social Historia Economica
Diabetes Mellitus, funciones, partes y tipos
Administracion y contabilidad publica 1era clase
Riesgos en Negociaciones_comercio exterior.pdf
Precio optimo de venta para un emprendimiento familiar
DIAPOSITIVA DE TEORIA CRITICA EN EDUCACION - RAMOS ALANIA ANA MARIA.pptx
TRATA Y TRÁFICO DE PERSONAS defensoría del pueblo
Proyecto Bootcamp - Entregables y Documentación.pdf
La gestión en los servicios de salud.pptx 1.pptx
DICTÁMENES MÉDICO-PSIQUIÁTRICOS Y PSICOLÓGICOS FORENSES 6.pptx
lareformaprevisional-091013175510-phpapp01.pptx
CRITERIOS DE UN SERVICIO DE INTENSIVO presen.pptx

Bdii 06 func_grupo_y_subconsultas

  • 2. Facultad Politécnica Base de Datos II 2 Cláusula GROUP BY y HAVING Declaración de SELECT : Sintaxis  Las funciones de grupo operan sobre conjuntos de filas para dar un resultado por cada grupo  Las funciones de grupo pueden utilizarse tanto en la sentencia SELECT como en la sentencia HAVING.  GROUP BY divide filas en los grupos más pequeños.  HAVING restringe el resultado (condición) SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
  • 3. Facultad Politécnica Base de Datos II 3 Funciones de Grupo AVG (DISTINCT | ALL|n) Valor promedio de n, ignorando valores nulos COUNT (DISTINCT |ALL| expr|*) Nº de filas. Con * cuenta todas, incluyendo nulos MAX (DISTINCT | ALL| expr) Máximo valor de la expresión MIN (DISTINCT | ALL | expr) Mínimo valor de la expresión STDDEV (DISTINCT | ALL|n) Desviación estándar (ignora nulos) SUM (DISTINCT | ALL|n) Suma valores. Ignora nulos VARIANCE (DISTINCT | ALL|n) Varianza. Ignora nulos
  • 4. Facultad Politécnica Base de Datos II 4 Funciones de GRUPO • MAX y MIN pueden utilizarse para cualquier tipo de dato. SQL> SELECT MIN(apellido), MAX(apellido) 2 FROM b_personas 3 WHERE ES_CLIENTE = 'S'; SQL> SELECT SUM(MONTO_TOTAL), AVG(MONTO_TOTAL), 2 MIN(MONTO_TOTAL), MAX(MONTO_TOTAL) 3 FROM B_VENTAS 4* WHERE ID_CLIENTE = 2; • Se puede usar AVG y SUM con columnas que guardan datos numéricos exclusivamente.
  • 5. Facultad Politécnica Base de Datos II 5 Función COUNT : Ejemplos • COUNT (*) retorna el número de filas en una tabla. SQL> SELECT COUNT(*) 2 FROM b_posicion_actual 3 WHERE id_area = 12; SQL> SELECT COUNT(RUC) 2 FROM b_personas 3 WHERE ES_CLIENTE = 'S'; • COUNT(expr) retorna el número de filas no-nulas.
  • 6. Facultad Politécnica Base de Datos II 6 La cláusula GROUP BY Sintaxis • Divide filas en una tabla en los grupos más pequeños usando la cláusula GROUP BY. • La misma lista de columnas que se utilizan en la cláusula SELECT, deben ser utilizadas en la cláusula GROUP BY • Defina el orden predefinido usando ORDER BY. SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column];
  • 7. Facultad Politécnica Base de Datos II 7 Sin la cláusula GROUP BY ID APELLIDO ID_LOCALIDAD --- -------------- ------------ 5 BRIZUELA CUEVAS 12 6 ACHUCARRO 12 7 12 La localidad 12 se despliega tres veces porque está asignado a 3 clientes SQL> SELECT id, apellido, id_localidad 2 FROM b_personas 3 WHERE id_localidad = 12 4 AND es_cliente= 'S';
  • 8. Facultad Politécnica Base de Datos II 8 Con la cláusula GROUP BY Group By: despliega una línea de datos para cada grupo recuperado por la cláusula WHERE, y COUNT (*). En este caso corresponde al número de clientes de la localidad 12. SQL> SELECT id_localidad, count(*) Cantidad 2 FROM b_personas 3 WHERE id_localidad = 12 4 AND es_cliente= 'S' 5 GROUP BY id_localidad; ID_LOCALIDAD CANTIDAD ------------ -------- 12 3
  • 9. Facultad Politécnica Base de Datos II 9 GROUP BY : Ejemplos • Despliegue los diferentes tipos de personas y la cantidad por cada tipo SQL> SELECT tipo_persona, COUNT(*) Cantidad 2 FROM b_personas 3 GROUP BY tipo_persona; SQL> SELECT p.cod_categoria, COUNT(p.cedula) 2 FROM B_POSICION_ACTUAL p 3 WHERE fecha_fin IS NULL 4 GROUP BY p.Cod_Categoria; • Determine todas las categorías salariales ocupadas, la cantidad de empleados que poseen dichas categorías
  • 10. Facultad Politécnica Base de Datos II 10 SQL> SELECT p.cod_categoria CAT, COUNT(p.cedula) Cantid 2 FROM B_POSICION_ACTUAL p 3 WHERE fecha_fin IS NULL 4 GROUP BY p.Cod_Categoria 5 HAVING COUNT(p.cedula) > 1; Desplegando Grupos específicos usando la cláusula HAVING CAT CANTID --- -------- 42 2 43 2 48 2 49 2 56 3 66 2 La cláusula HAVING condiciona los grupos Sólo se despliegan aquellas categorías que tienen más de 1 empleado
  • 11. Facultad Politécnica Base de Datos II 11 La cláusula HAVING: Sintaxis Use la cláusula HAVING para restringir grupos.  Paso 1: Se agrupan filas.  Paso 2: Se aplica la función de grupo.  Paso 3: Se despliegan los grupos que cumplen con la condición del HAVING. SELECT column, group_function FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
  • 12. Facultad Politécnica Base de Datos II 12 Errores que no deben cometerse: Todas las columnas citadas en el SELECT que sean parte de la función agregada DEBEN estar en la cláusula GROUP BY, pues de lo contrario, dará un mensaje de error La cláusula WHERE no puede utilizarse para condicionar grupos.
  • 13. Facultad Politécnica Base de Datos II 13 SUBQUERIES
  • 14. Facultad Politécnica Base de Datos II 14 • Una Subconsulta (subquery) es una sentencia SELECT ‘embebida’ en otra sentencia SQL. • Son muy útiles cuando se trata de seleccionar filas de una tabla con una condición que depende de la tabla en sí. • Se puede usar subqueries en SQL con las cláusulas:  WHERE (QUERY ANIDADO)  HAVING  FROM (INLINE VIEWS)  FROM (para seleccionar las filas en un sentencia CREATE o INSERT) LAS SUBCONSULTAS
  • 15. Facultad Politécnica Base de Datos II 15 Formato del Sub query SELECT Syntax SELECT... FROM... WHERE... Sintaxis de otro SELECT (SELECT... FROM... WHERE...) ; Query Principal Subquery
  • 16. Facultad Politécnica Base de Datos II 16 Ejemplo de la subconsulta: Seleccionar los empleados que tienen el mismo jefe que “Ferreira” B_EMPLEADOS B_EMPLEADOS Servidor APELLIDO CEDULA_JEFE Ferreira 952160 Moreno 952160 Gonzalez 952160 Caballero 952160 Balmaceda 952160 CEDULA_JEFE 952160
  • 17. Facultad Politécnica Base de Datos II 17 Ejemplo de la subconsulta SQL> SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA'); Seleccionar los empleados que tienen el mismo jefe que “Ferreira”
  • 18. Facultad Politécnica Base de Datos II 18 SINTAXIS DE LAS SUB CONSULTAS • El subquery se ejecuta una vez antes del Query principal. • El resultado del subquery es usado por el Query exterior principal. SELECT lista de columnas FROM tabla WHERE expresión Operador (SELECT lista de columnas FROM tabla);
  • 19. Facultad Politécnica Base de Datos II 19 Indicaciones para los subqueries:  La subconsulta debe aparecer entre paréntesis  Se pueden utilizar subconsultas con operadores de comparasión de una sola fila ( >, =, >=, <, <>, <= ) y de MÚLTIPLES FILAS ( IN, NOT IN).  La subconsulta debe aparecer en el lado derecho del operador  NO PUEDEN TENER la cláusula ORDER BY.
  • 20. Facultad Politécnica Base de Datos II 20 ¿Cómo se procesan las consultas anidadas? Query anidado Query Principal 1. La declaración SELECT anidada se ejecuta primero. 2. El resultado se pasa en la condición de pregunta principal. SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA') Retorna cedula_jefe= 952160
  • 21. Facultad Politécnica Base de Datos II 21 Consultas de una sola fila Escriba la declaración de SQL para desplegar el nombre y apellido del empleado. Ponga ambas declaraciones y deje que el SQL determine el valor de comparación SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA' SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = Escriba la consulta para averiguar el jefe de Ferreira SELECT NOMBRE, APELLIDO, CEDULA_JEFE FROM B_EMPLEADOS WHERE CEDULA_JEFE = (SELECT CEDULA_JEFE FROM B_EMPLEADOS WHERE UPPER(APELLIDO)= 'FERREIRA')
  • 22. Facultad Politécnica Base de Datos II 22 SQL> SELECT nombre, costo 2 FROM b_articulos 3 WHERE costo < (SELECT AVG(costo) 4 FROM b_articulos) 5 ORDER by costo DESC; Ejemplo de la utilización de funciones de grupo en la subconsulta Seleccionar el nombre y costo de los artículos cuyo costo está por debajo del promedio.
  • 23. Facultad Politécnica Base de Datos II 23 Utilización de funciones de grupo en una subconsulta NOMBRE COSTO Porta utensilios Cheff 59848 Mantel Cadence 140x250 52273 Almohada Plumi 50x70 Altenburg 52273 Florero 31x15cm 30227 Figura decorativa Buho 25758 Toalla Felpa Hilo Egipcio 18864 Bandeja redonda 12" 18864 Servido r AVG(COSTO) 72145,90625 Artículos cuyo costo está por debajo del promedio
  • 24. Subquery escalar Un subquery escalar es aquel que retorna exactamente una columna de una fila De allí que el subquery escalar puede utilizarse en expresiones tales como  DECODE y CASE  Todas las cláusulas de SELECT, con excepción de GROUP BY
  • 25. Ejemplo de uso de un subquery escalar en el CASE: select nombre_cta, (CASE WHEN id_tipo = (SELECT id FROM b_tipo_cuenta WHERE nombre_categoria =('ACTIVO')) THEN 'ACTIVO' ELSE 'Otra clasificación' END) Clasificación FROM b_cuentas;
  • 26. Facultad Politécnica Base de Datos II 26 Errores con Subqueries  Si se escribe un subquery que devuelve más de una fila y se usa un operador de comparación de fila, la sentencia dará error. SQL> SELECT nombre, apellido FROM b_personas WHERE id_localidad = (SELECT id FROM b_localidad WHERE UPPER(nombre) LIKE 'CAA%'); ERROR en línea 4: ORA-01427: la subconsulta de una sola fila devuelve más de una fila  Para corregir el error, cambie al operador de la comparación a IN, un operador de la fila múltiple.
  • 27. Facultad Politécnica Base de Datos II 27 Ejemplo de subconsultas que retornan múltiples filas  Un subquery de filas múltiples devuelve más de 1 fila.  Usted debe usar a un operador de la fila múltiple en la cláusula WHERE, por ejemplo el operador IN. SQL> SELECT nombre, apellido, id_localidad FROM b_personas WHERE id_localidad IN (SELECT id FROM b_localidad WHERE UPPER(nombre) LIKE 'CAA%');
  • 28. Facultad Politécnica Base de Datos II 28 Utilización de cláusula HAVING en una SUBCONSULTA • También se puede utilizar una subconsulta en la cláusula HAVING • Siempre se ejecuta primeramente la SUBCONSULTA y retorna el resultado a la cláusula HAVING de la consulta principal SQL> SELECT CEDULA_VENDEDOR, AVG(MONTO_TOTAL)COSTO FROM B_VENTAS GROUP BY CEDULA_VENDEDOR HAVING AVG(MONTO_TOTAL) < (SELECT AVG(MONTO_TOTAL) FROM B_VENTAS);
  • 29. Facultad Politécnica Base de Datos II 29 Subqueries con múltiples columnas Se pueden comparar más de una columna, para ello la sintaxis es la siguiente: SELECT columna, columna, ... FROM tabla WHERE (columna, columna, ...) IN (SELECT columna, columna, ... FROM tabla WHERE condición)
  • 30. Consultas correlacionadas  Un subquery correlacionado es aquel que contiene una referencia a una tabla que aparece el query exterior (query principal). La sintaxis es la siguiente: SELECT columna1, columna2, ... FROM tabla1 alias_tab1 WHERE columna1 <operador> (SELECT columna1 FROM tabla2 WHERE expresion1 = alias_tab1.expresion2);
  • 31. Facultad Politécnica Base de Datos II 31 Uso del operador EXISTS en consultas correlacionadas  El operador EXISTS verifica la existencia de filas en el conjunto resultante del subquery  Si se encuentra la fila, la búsqueda ya no continúa y se retorna TRUE.  Ejemplo: Seleccionar todos los empleados que tienen al menos un empleado que depende de él SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE EXISTS (SELECT 'X' FROM B_EMPLEADOS WHERE CEDULA_JEFE = E.CEDULA);
  • 32. Facultad Politécnica Base de Datos II 32 EXISTS vs IN SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE EXISTS (SELECT 'X' FROM B_EMPLEADOS WHERE CEDULA_JEFE = E.CEDULA); Tomando el mismo ejemplo: Seleccionar todos los empleados que tienen al menos un empleado que depende de él (Es decir, que son jefes): SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE CEDULA IN (SELECT CEDULA_JEFE FROM B_EMPLEADOS); Si bien generan el mismo resultado, se procesan de modo diferente. EXISTS puede ser más eficiente si el Subquery tien muchos datos.
  • 33. Facultad Politécnica Base de Datos II 33 NOT EXISTS vs NOT IN SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE NOT EXISTS (SELECT 'X' FROM B_EMPLEADOS WHERE CEDULA_JEFE = E.CEDULA); Aunque pareciera que son equivalents puede que no generen el mismo resultado. Ej: Ver todos los empleados que no son jefes. SELECT CEDULA, NOMBRE FROM B_EMPLEADOS E WHERE CEDULA NOT IN (SELECT CEDULA_JEFE FROM B_EMPLEADOS); Verifique el resultado, debido a la presencia de valores NULL en el subquery!
  • 34. Facultad Politécnica Base de Datos II 34 INLINEVIEWS (Vistas Inlines)  Un sub query en la cláusula FROM es llamada vista inline, ya que el sub query representa virtualmente una vista. SELECT lista_de_campos FROM <subconsulta>; SELECT CLIENTE, MONTO_VENTAS FROM (SELECT ID_CLIENTE CLIENTE, SUM(MONTO_TOTAL) MONTO_VENTAS FROM B_VENTAS GROUP BY ID_CLIENTE) V /
  • 35. Facultad Politécnica Base de Datos II 35 Uso de la cláusula WITH  Mediante la cláusula WITH, puede definir un bloque de consulta antes de utilizarlo en una consulta. La cláusula WITH (conocida formalmente como subquery_factoring_clause) le permite reutilizar el mismo bloque de consulta en una sentencia SELECT cuando se produce más de una vez dentro de una consulta compleja.  Esto resulta particularmente útil cuando una consulta tiene muchas referencias al mismo bloque de consulta y hay presentes uniones y agregaciones. Ejemplo:Ver el id, nombre y cantidad del artículo más vendido
  • 36. Facultad Politécnica Base de Datos II 36 Ejemplo sin la cláusula WITH SELECT v.id_articulo, a.nombre, SUM(v.cantidad) cantidad FROM b_detalle_ventas v JOIN b_articulos a ON a.id = v.id_articulo GROUP BY v.id_articulo, a.nombre HAVING SUM(v.cantidad) = (SELECT MAX(v.cantidad) maximo FROM (SELECT v.id_articulo, a.nombre, SUM(v.cantidad) cantidad FROM b_detalle_ventas v JOIN b_articulos a ON a.id = v.id_articulo GROUP BY v.id_articulo, a.nombre) v);
  • 37. Facultad Politécnica Base de Datos II 37 Ejemplo con el uso de la cláusula WITH WITH sum_ven AS (SELECT v.id_articulo, a.nombre, SUM(v.cantidad) cantidad FROM b_detalle_ventas v JOIN b_articulos a ON a.id = v.id_articulo GROUP BY v.id_articulo, a.nombre) SELECT v.id_articulo, v.nombre, v.cantidad FROM sum_ven v WHERE v.cantidad = (SELECT MAX(v.cantidad) maximo FROM sum_ven v);
  • 38. Facultad Politécnica Base de Datos II 38 QUERIES JERÁRQUICOS Si la tabla contiene datos organizados jerárquicamente, es posible recuperar los datos en orden jerárquico utilizando la cláusula jerárquica: START WITH <condición> CONNECT BY <condición>
  • 39. Facultad Politécnica Base de Datos II 39 La cláusula jerárquica  Permite listar los datos reflejando la ramificación de los datos cuando éstos están estructurados en orden jerárquico  El primer elemento de una jerarquía se llama nodo raíz. Las ramificaciones son nodos, y el último elemento de una ramificación es la hoja.  La cláusula START WITH especifica la fila raíz de la jerarquía  La cláusula CONNECT BY es la que permite fijar la relación de dependencia entre las filas ‘padres’ y las filas ‘hijas’ dentro de la jerarquía  PRIOR se refiere al sentido del recorrido
  • 40. Ejemplo de Estructura de árbol en la tabla b_cuentas Codigo_cta = 1000000 ACTIVO (padre) 1100000 Activo Corriente 1200000 Activo Fijo 1300000 Inventario de Mercaderías 1110000 Caja 1120000 Bancos 1130000 Cuentas por cobrar
  • 41. Recuerde:  El recorrido del árbol (Top Down o Bottom Up) depende de la cláusula PRIOR: Ver la cuenta de ACTIVO (1000000) y las que dependen de ella SELECT codigo_cta,nombre_cta FROM b_cuentas start with codigo_cta = 1000000 connect BY PRIOR codigo_cta = cta_superior; Ver las cuentas superiores a la cuenta 1130000: SELECT codigo_cta,nombre_cta FROM b_cuentas start with codigo_cta = 1130000 connect BY codigo_cta = PRIOR cta_superior;
  • 42.  Para mostrar la jerarquía en los datos recuperados: SELECT LPAD(' ',2*(LEVEL-1))|| TO_CHAR(codigo_cta,'0000000') codigo_cta, nombre_cta FROM b_cuentas start with codigo_cta = 1000000 connect BY PRIOR codigo_cta = cta_superior; CODIGO_CTA NOMBRE_CTA -------------------- ---------------------------------------- 1000000 ACTIVO 1100000 ACTIVO CORRIENTE 1110000 CAJA 1110100 CAJA CHICA 1120000 BANCOS 1120100 Cta. Cte. 386881 Banco ITAU 1120200 Cta.Cte. 504 Banco Nacional de Fomento 1130000 Cuentas por cobrar CLIENTES 1130100 Cadena Hiperseis 1130200 Supermercado STOCK 1130300 Supermercado Gran V├¡a 1200000 ACTIVO FIJO 1210000 Rodados 1220000 Inmuebles 1300000 INVENTARIO MERCADERIAS 1310000 MERCADERIAS