ADF

Consulta de Tablas II

GROUP BY


En esta parte veremos a varias clausulas entre ellas al GROUP BY, que se encarga de agrupar los registros de una selección según se le indique (suma, valor mínimo o máximo...)
La clausula GROUP BY combina los registros devueltos por una consulta SELECT obteniendo uno o varios valores agregados(suma, valor mínimo y máximo ...).

Para cada registro se puede crear un valor agregado si se incluye una función SQL agregada, como por ejemplo Sum o Count, en la instrucción SELECT. Como recordaran la sintaxis es:

SELECT [ALL | DISTINCT ] [TOP <n> [WITH TIES]] <nombre_campo> [{,<nombre_campo>}] [{,<funcion_agregado>}] 
FROM <nombre_tabla>|<nombre_vista> [{,<nombre_tabla>|<nombre_vista>}] 
[WHERE <condicion> [{ AND|OR <condicion>}]] [GROUP BY <nombre_campo> [{,<nombre_campo >}]] [HAVING <condicion>[{ AND|OR <condicion>}]] [ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC] [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]


Si se utiliza GROUP BY pero no existe una función SQL agregada en la instrucción SELECT se obtiene el mismo resultado que con una consulta SELECT DISTINCT. Los valores Null en los campos GROUP BY se agrupan y no se omiten. Sin embargo, los valores Null no se evalúan en ninguna de las funciones SQL agregadas.


Todos los campos de la lista de campos de SELECT deben incluirse en la cláusula GROUP BY o como argumentos de una función SQL agregada.


HAVING



HAVING , esta clausula permita escoger solo algunos de la filas, Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro agrupado por la cláusula GROUP BY que satisfaga las condiciones de la cláusula HAVING. Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la cláusula HAVING para filtrar los registros una vez agrupados. 

HAVING es parecido a WHERE, muestra qué registros se seleccionan pero después del agregado. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a mostrar.
La sintaxis es la siguiente:
SELECT CLIENTES.NOMBRE, CLIENTES.APELLIDO1, CLIENTES.APELLIDO2, SUM(PRECIO) 
FROM DETALLE_PEDIDO
INNER JOIN PEDIDOS ON DETALLE_PEDIDO.CO_PEDIDO = PEDIDOS.CO_PEDIDO
INNER JOIN CLIENTES ON PEDIDOS.CO_CLIENTE = CLIENTES.CO_CLIENTE
WHERE CLIENTES.NOMBRE != 'UN NOMBRE'
GROUP BY CLIENTES.NOMBRE, CLIENTES.APELLIDO1, CLIENTES.APELLIDO2  
HAVING SUM(PRECIO) > 100


AVG

Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado de una consulta. Su sintaxis es la siguiente


AVG(<expr>)


En donde expr representa el campo que contiene los datos numéricos para los que se desea calcular la media o una expresión que realiza un cálculo utilizando los datos de dicho campo. La media calculada por Avg es la media aritmética (la suma de los valores dividido por el número de valores). La función Avg no incluye ningún campo Null en el cálculo.


SELECT CLIENTES.NOMBRE,  CLIENTES.APELLIDO1, CLIENTES.APELLIDO2,AVG(PRECIO)  
FROM DETALLE_PEDIDO
INNER JOIN PEDIDOS ON DETALLE_PEDIDO.CO_PEDIDO = PEDIDOS.CO_PEDIDO
INNER JOIN CLIENTES ON PEDIDOS.CO_CLIENTE = CLIENTES.CO_CLIENTE
GROUP BY CLIENTES.NOMBRE, CLIENTES.APELLIDO1, CLIENTES.APELLIDO2




COUNT

Count, como indica su nombre cuenta las filas que existen en el resultado o la tabla

COUNT(<expr>) 

El siguiente ejemplo realiza una "cuenta" de los datos que hay en la tabla PRODUCTOS.

SELECT COUNT(*) FROM PRODUCTOS 
Otro Ejemplo

SELECT COUNT(*) FROM PEDIDOS

Otro mas:

SELECT CLIENTES.NOMBRE, COUNT(*) 
FROM PEDIDOS
INNER JOIN CLIENTES ON PEDIDOS.CO_CLIENTE = CLIENTES.CO_CLIENTE
GROUP BY CLIENTES.NOMBRE



MAX, MIN



Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo especifico de una consulta. Su sintaxis es:


MIN(<expr>) MAX(<expr>)

En donde expr es el campo sobre el que se desea realizar el cálculo. Expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL).


SELECT CLIENTES.NOMBRE, MIN(PEDIDOS.FX_ALTA), MAX(PEDIDOS.FX_ALTA)
FROM PEDIDOS
INNER JOIN CLIENTES ON PEDIDOS.CO_CLIENTE = CLIENTES.CO_CLIENTE
GROUP BY CLIENTES.NOMBRE




SUM

Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es:


SUM(<expr>) 

En donde expr respresenta el nombre del campo que contiene los datos que desean sumarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL).



SELECT CLIENTES.NOMBRE, SUM(PEDIDOS.TOTAL_PEDIDO) 
FROM PEDIDOS
INNER JOIN CLIENTES ON PEDIDOS.CO_CLIENTE = CLIENTES.CO_CLIENTE
GROUP BY CLIENTES.NOMBRE





Uso de Select TOP con consultas agregadas. Podemos utilizar SELECT TOP con consultas agregadas como con cualquier otra instruccion Transact SQL.
En estos casos, la clausula TOP se aplica despues de calcular el agregado, devolviendo las N filas indicadas.
En este escenario es posible que queramos obtener los N valores que satisfagan una condicion. Por ejemplo, queremos si queremos obtener los tres primeros clientes con mayores pedidos, usariamos una consulta parecida a esta:




SELECT TOP 3 CLIENTES.NOMBRE, SUM(DETALLE_PEDIDO.PRECIO)
FROM DETALLE_PEDIDO
INNER JOIN PEDIDOS ON DETALLE_PEDIDO.CO_PEDIDO = PEDIDOS.CO_PEDIDO
INNER JOIN CLIENTES ON PEDIDOS.CO_CLIENTE = CLIENTES.CO_CLIENTE
GROUP BY CLIENTES.NOMBRE
ORDER BY 2 -- SUM(DETALLE_PEDIDO.PRECIO_UNIDAD)



Sin embargo, puede darse el caso, de que el cuarto cliente devuelto por la consulta tenga un valor agragado identico al tercero, (es decir, estan empatados). El uso de TOP 3 discriminaría el cuarto registro. Para evitar este comportamiento, y que la consulta devuelva también al cuarto cliente utilizamos la clausula WITH TIES.

SELECT TOP 3 WITH TIES CLIENTES.NOMBRE, SUM(DETALLE_PEDIDO.PRECIO)
FROM DETALLE_PEDIDO
INNER JOIN PEDIDOS ON DETALLE_PEDIDO.CO_PEDIDO = PEDIDOS.CO_PEDIDO
INNER JOIN CLIENTES ON PEDIDOS.CO_CLIENTE = CLIENTES.CO_CLIENTE
GROUP BY CLIENTES.NOMBRE
ORDER BY 2 -- SUM(DETALLE_PEDIDO.PRECIO_UNIDAD)




Algunas Tablas para recordar:

Operadores matemáticos:
>Mayor que
<Menor que
>=Mayor o igual que
<=Menor o igual que
<>Distinto
=Igual


Operadores lógicos
And
Or
Not


Otros operadores
LikeSelecciona los registros cuyo valor de campo se asemeje, no teniendo en cuenta mayúsculas y minúsculas.
In y Not InDa un conjunto de valores para un campo para los cuales la condición de selección es (o no) valida
Is Null y Is Not NullSelecciona aquellos registros donde el campo especificado esta (o no) vacío.
Between...AndSelecciona los registros comprendidos en un intervalo
DistinctSelecciona los registros no coincidentes
DescClasifica los registros por orden inverso


Comodines
*Sustituye a todos los campos
%Sustituye a cualquier cosa o nada dentro de una cadena
_Sustituye un solo carácter dentro de una cadena

FunciónDescripción
Sum(campo)Calcula la suma de los registros del campo especificado
Avg(Campo)Calcula la media de los registros del campo especificado
Count(*)Nos proporciona el valor del numero de registros que han sido seleccionados
Max(Campo)Nos indica cual es el valor máximo del campo
Min(Campo)Nos indica cual es el valor mínimo del campo


0 Response to "Consulta de Tablas II"

Publicar un comentario

Popular Posts

Labels

AVG (1) Base de Datos (1) Campos (1) Constraint (1) Consulta (1) Count (1) DCL (1) DDL (1) delete (1) DISTINCT (1) DML (1) EXCEPT (1) Group By (1) HAVING (1) IN (1) Indice (1) insert (1) INTERSECT (1) JOIN (1) LIKE (1) Max (1) Min (1) Modificar (1) ORDER BY (1) registros (1) Select (1) SQL (4) SUM (1) Tipos de Datos (1) truncate (1) UNION (1) Update (1) WHERE (1)

Teste Teste Teste

Popular Posts

Teste Teste Teste