You are on page 1of 6

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA DE SISTEMAS


BASES DE DATOS

NOMBRE: Alex Francisco Carrera Alvarez

TEMA: Funciones de Agregación

OBJETIVOS:

 Comprender la sintaxis de funciones de agregación asimilando su contenido y reforzándolo con los


conceptos impartidos en clase
 Practicar las diferentes funciones de agregación con los ejercicios propuestos en el siguiente documento

MARCO TEÓRICO:

FUNCIONES DE AGREGACIÓN

Las funciones de agregación son funciones que toman una colección (un conjunto o multiconjunto) de valores como
entrada y devuelven un solo valor. SQL ofrece cinco funciones de agregación incorporadas:
Media: avg
Mínimo: min
Máximo: max
Total: sum
Recuento: count
Los datos de entrada para sum y avg deben ser una colección de números, pero los otros operadores también
pueden operar sobre colecciones de datos de tipo no numérico como las cadenas de caracteres.

EJEMPLO:

Determinar el saldo medio de las cuentas de la sucursal


de Navacerrada”. Esta consulta se puede formular del modo siguiente:

select avg (saldo)


from cuenta
where nombre_sucursal = ’Navacerrada’

El resultado de esta consulta es una relación con un único atributo, que contiene una sola tupla con un valor
numérico correspondiente al saldo medio de la sucursal de Navacerrada. Opcionalmente se puede dar un nombre al
atributo de la relación resultante, utilizando la cláusula as.
Existen circunstancias en las cuales sería deseable aplicar las funciones de agregación no sólo a un único conjunto de
tuplas sino también a un grupo de conjuntos de tuplas; esto se especifica en SQL mediante la cláusula group by. El
atributo o atributos especificados en la cláusula group by se usan para formar grupos. Las tuplas con el mismo valor
en todos los atributos de la cláusula group by constituyen un mismo grupo.

EJEMPLO:

Considérese la consulta “Determinar el saldo medio de las cuentas de cada sucursal”.

Esta consulta se formula del modo siguiente:

select nombre_sucursal, avg (saldo)


from cuenta
group by nombre_sucursal
La conservación de los valores duplicados es importante para el cálculo de medias. Supóngase que los saldos de las
cuentas en la (pequeña) sucursal de Galapagar son 1.000 e, 3.000 e, 2.000 e y 1.000 e.
El saldo medio es 7.000/4 = 1.750,00 e. Si se eliminasen los valores duplicados se obtendría un resultado erróneo
(6.000/3 = 2.000 e).
A veces se desea tratar toda la relación como un solo grupo. En estos casos no se utiliza la cláusula group by.

EJEMPLO:

“Determinar el saldo medio de todas las cuentas”.


Esta consulta se formula del modo siguiente:

select avg (saldo)


from cuenta

Con frecuencia se usa la función de agregación count para contar el número de tuplas de una relación.
La notación de SQL para esta función es count (*). Por tanto, para determinar el número de tuplas de la relación
cliente hay que escribir

select count (*)


from cliente

Se dan casos en los cuales es necesario eliminar los valores duplicados antes de calcular una función de agregación.
Si se desea eliminar los valores duplicados hay que utilizar la palabra clave distinct en la expresión de agregación.

EJEMPLO:

Considérese la consulta “Determinar el número de impositores de cada sucursal”. En este caso cada impositor sólo
se debe contar una vez, independientemente del número de cuentas que pueda tener. La consulta se formula del
modo siguiente:

select nombre_sucursal, count (distinct nombre_cliente)


from impositor, cuenta
where impositor.número_cuenta = cuenta.número_cuenta
group by nombre_sucursal

SQL no permite el uso de distinct con count (*). Sí es legal el uso de distinct con max y min, aunque el resultado no
cambia. Se puede utilizar la palabra clave all en lugar de distinct para especificar la conservación de los valores
duplicados pero, como all es la opción predeterminada, no hace falta hacerlo.

A veces resulta útil establecer una condición que se aplique a los grupos en vez de a las tuplas.

EJEMPLO:

Puede que sólo estemos interesados en las sucursales en las que el saldo medio de las cuentas sea superior a 1.200
e. Esta condición no se aplica a una sola tupla, sino a cada grupo creado por la cláusula group by. Para expresar este
tipo de consultas se utiliza la cláusula having de SQL. SQL aplica
los predicados de la cláusula having una vez formados los grupos, de modo que se puedan usar las funciones de
agregación. Esta consulta se expresa en SQL del modo siguiente:

select nombre_sucursal, avg (saldo)


from cuenta
group by nombre_sucursal
having avg (saldo) > 1200

Si en la misma consulta aparecen una cláusula where y una cláusula having, SQL aplica primero el predicado de la
cláusula where. Las tuplas que satisfacen el predicado de la cláusula where se dividen luego en grupos según la
cláusula group by. Después se aplica la cláusula having (si existe) a cada grupo; SQL elimina los grupos que no
satisfacen el predicado de la cláusula having. La cláusula select utiliza los grupos restantes para generar las tuplas del
resultado de la consulta.

Para ilustrar el uso conjunto de la cláusula where y la cláusula having en la misma consulta,

EJEMPLO:

“Determinar el saldo medio de cada cliente que vive en Peguerinos y tiene, como
mínimo, tres cuentas”.

select impositor.nombre_cliente, avg (saldo)


from impositor, cuenta, cliente
where impositor.número_cuenta = cuenta.número_cuenta and
impositor.nombre_cliente = cliente.nombre_cliente and
ciudad_cliente = ’Peguerinos’
group by impositor.nombre_cliente
having count (distinct impositor.número_cuenta) >= 3

FUNCIONES DE AGREGACIÓN

Las funciones de agregación en SQL nos permiten efectuar operaciones sobre un conjunto de resultados, pero
devolviendo un único valor agregado para todos ellos. Es decir, nos permiten obtener medias, máximos, etc.… sobre
un conjunto de valores.

Las funciones de agregación básicas que soportan todos los gestores de datos son las siguientes:

COUNT: devuelve el número total de filas seleccionadas por la consulta.


MIN: devuelve el valor mínimo del campo que especifiquemos.
MAX: devuelve el valor máximo del campo que especifiquemos.
SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.

DESARROLLO DE LA PRACTICA

1. Consultar los nombres de clientes y totales adquiridos por cada uno de ellos

select Customers.CustomerID , count([Order Details].UnitPrice) as Total from Customers, Orders, [Order Details]
where Customers.CustomerID=Orders.CustomerID and Orders.OrderID=[Order Details].OrderID group by
Customers.CustomerID
2. Consultar los nombre de los productos y suma de cantidades adquiridas por cada producto

select Products.ProductName, COUNT(*) as Cantidad from Products, [Order Details] where


Products.CategoryID=[Order Details].ProductID group by Products.ProductName

3. Consultar nombre de clientes y números de factura emitidas por cada uno

select Customers.ContactName , count(Orders.OrderID) as Total from Customers, Orders where


Customers.CustomerID=Orders.CustomerID group by Customers.ContactName
4. Consultar los nombre de clientes que tienen más de cinco facturas

select Customers.ContactName , count(Orders.OrderID) as Total from Customers, Orders where


Customers.CustomerID=Orders.CustomerID group by Customers.ContactName having count(*)>5
5. Consultar los nombres de clientes que han comprado en total más de 10 productos.

select Customers.CustomerID , count([Order Details].Quantity) as Total from Customers, Orders, [Order Details]
where Customers.CustomerID=Orders.CustomerID and Orders.OrderID=[Order Details].OrderID group by
Customers.CustomerID having count([Order Details].Quantity)>10

CONCLUSIONES Y RECOMENDACIONES:

 Tomar en cuenta la sintaxis a utilizar


 Recordar que las funciones de agregación se las utiliza con la instrucción having
 Se aconseja usar ; al final de cada instrucción SQL para evitar errores de lectura en momento de ejecución.
 Las instrucciones en SQL tienen su semejante en Álgebra relacional, debido a que SQL es basado en este tipo
de álgebra.
 Hay que tener claro el modelo E-R para poder obtener el resultado deseado.
 Una buena práctica al realizar consultas es comentar el enunciado de razón de esa consulta y se usa --

BIBLIOGRAFÍA:

 Daniel Santiago Martínez. (2012). T2 - Modelo relacional. 03/05/2017, de slideshare Sitio web:
https://es.slideshare.net/DaniSantia/t2-modelo-relacional
 ABRAHAM SILBERSCHATZ, HENRY F. KORTH, S. SUDARSHAN. (2006). Fundamentos de Bases de Datos.
España: McGRAW-HILL.
 NA. (2016). ¿Qué es un proveedor?. 03/05/2017, de Reviso Sitio web: https://www.reviso.com/es/que-es-
un-proveedor
 Julián Pérez Porto y Ana Gardey. (2011). Orden compra. 03/05/2017, de Definicio.de Sitio web:
http://definicion.de/orden-de-compra/
 SQL Server Ya. (NA). Exists y No Exists. 24/05/2017, de Tutoriales ya Sitio web:
http://www.tutorialesprogramacionya.com/sqlserverya/temarios/descripcion.php?cod=102&punto=96&inic
io=
 campusMVP . (21 julio 2014 09:00). Fundamentos de SQL: Agrupaciones y funciones de agregación.
24/05/2017, de CampusMVP Sitio web: https://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-
Agrupaciones-y-funciones-de-agregacion.aspx

You might also like