InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial SQL
Introducción SQL
El lenguaje SQL
Componentes del lenguaje SQL
Tablas
Indices
Vistas
Consultar datos. SELECT
Insertar datos. INSERT
Borrado de datos. DELETE
Actualización de datos. UPDATE
Consultas combinadas. JOINS
Consultas agregadas
Subconsultas
También puedes ver ...
¿Qué es el Collation en SQL ?
Como encriptar o cifrar cadenas y campos en SQL server 2005 ENCRYPTBYPASSPHRASE y DECRYPTBYPASSPHRASE
SQL Prompt - Intellisense para SQL Server
Borrado de datos. DELETE
Introducción SQL
El lenguaje SQL
Componentes del lenguaje SQL
Tablas
Indices
Vistas

Afiliados
La Web del programador
MundoProgramacion


 

Consultas agregadas

La cláusula GROUP BY

    La clausula GROUP BY combina los registros con valores idénticos en un único registro. 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. Su sintaxis es: 


SELECT
[ALL | DISTINCT ]
             <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 ]}]]

    GROUP BY es opcional. 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. No obstante, 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.


SELECT marca, modelo, SUM(numero_kilometros)
FROM tCoches
GROUP BY marca, modelo

La cláusula HAVING

    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 similar a WHERE, determina qué registros se seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a mostrar. HAVING permite el uso de funciones agregadas.


SELECT
marca, modelo, SUM(numero_kilometros)
FROM tCoches
WHERE marca <> 'BMW'
GROUP BY marca, modelo
HAVING SUM(numero_kilometros)>100000

    En el ejemplo anterior, no se cuentan los datos para todas las marcas menos "BMW", una vez que se han contado, se evalua HAVING, y el conjunto de resultados devuelve solo aquellos modelos con más de 100.000 km.


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
marca, modelo, AVG(numero_kilometros)
FROM tCoches

GROUP BY marca, modelo
    
 
Count

    Calcula el número de registros devueltos por una consulta. Su sintaxis es la siguiente:    


COUNT
(<expr>)

    En donde expr contiene el nombre del campo que desea contar. 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). Puede contar cualquier tipo de datos incluso texto.

    Aunque expr puede realizar un cálculo sobre un campo, Count simplemente cuenta el número de registros sin tener en cuenta qué valores se almacenan en los registros. La función Count no cuenta los registros que tienen campos null a menos que expr sea el carácter comodín asterisco (*). Si utiliza un asterisco, Count calcula el número total de registros, incluyendo aquellos que contienen campos null. Count(*) es considerablemente más rápida que Count(Campo). No se debe poner el asterisco entre dobles comillas ('*').


SELECT COUNT(*) FROM tCoches;
SELECT marca, COUNT(modelo)
FROM tCoches
GROUP BY marca;
SELECT marca, COUNT(DISTINCT modelo)
FROM tCoches
GROUP BY marca;

   
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
marca, modelo, MIN(numero_kilometros)
, MAX(numero_kilometros)
FROM tCoches
GROUP BY marca, modelo

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 marca, modelo, SUM(numero_kilometros)
FROM tCoches
GROUP BY marca, modelo

 


Inicio | Tutorial SQL Consultas combinadas. JOINSTutorial SQL Subconsultas Versión para imprimir Foros de consulta

 
Excelente por Austry
Respuesta recibida el [28/08/2007 07:23:43]
Excelente material - me cayo como anillo al dedo porque justamente estoy trabajando ful con SQL en la univ - felicitaciones

 
jaja por pn
Respuesta recibida el [11/09/2007 12:29:34]
anillo al dedo, jaja

 
LOS DESEABLES por VERONICA PIÑA
Respuesta recibida el [20/11/2007 06:19:23]
NO PUES ESTA MUY BIEN TODO ESTO POR QUE APRENDEMOS MAS AUNQUE SOLO LO IMPRIMAMOS NOMAS

 
BUENAS TARDES NECESITO HACER U... por TOMAS MENDEZ
Respuesta recibida el [07/03/2008 01:06:42]
BUENAS TARDES NECESITO HACER UN CONTADOR PARA SABER LOS NUMERO DE FACTURA QUE ME FALTAN

 
UURGENTE!!!!! por :: Tany ::
Respuesta recibida el [09/04/2008 03:50:00]
HOLA COMO ESTAN ?? BUENO  LES COMENTO  ESTOY REALIZANDO UN PROCEDURE QUE EJECUTA EL MONTO POR AÑO DE CADA CLIENTE, 
select a.codcli , a.nombre, a.apellido ,
sum( case when a.fecha = '2005' then a.monto else 0 end ) as [2005],
sum( case when a.fecha = '2006' then a.monto else 0 end ) as [2006],
sum( case when a.fecha = '2007' then a.monto else 0 end ) as [2007],
sum( case when a.fecha = '2008' then a.monto else 0 end ) as [2008],
sum( case when a.fecha = '2009' then a.monto else 0 end ) as [2009]
from
(
select a.codcli , a.nombre, a.apellido ,
right( convert( varchar(10) , b.fecha , 103 ) , 4 ) as fecha,
sum(b.monto) as monto
from cliente a with(nolock) inner join
factura b with(nolock) on a.codcli = b.codcli
group by a.codcli , a.nombre, a.apellido ,
right( convert( varchar(10) , b.fecha , 103 ) , 4 )
) a
group by a.codcli , a.nombre, a.apellido
order by a.codcli



AHORA DESEO HACER UN HISTORIAL DE CADA CLIENTE X AÑO .. ES DECIR ASI COMO SE MUESTRA EN EL DEMO

mas|
1000| x
5000| x
4000| x
2000| x x
1000| x x x x
-------------------
2005 2006 2007 2008

:: POR FAVOR SI ALGUIEN ME
PUEDA AYUDAR LES AGRADECERÉ
MUUUUU...CHO :: GRACIAS

 
de que pagina puedo descargar ... por Migue Angel Guerra
Respuesta recibida el [08/05/2008 10:01:37]
de que pagina puedo descargar mysql

 
re: por sabato48
Respuesta recibida el [15/05/2008 06:02:27]
http://www.mysql.com/

 
Destacar por Javier
Respuesta recibida el [25/06/2008 05:50:01]
Bastante bueno el tutorial, me gustó,muy didáctico.

Solo quisiera acotar, que en ciertos casos es posible omitir la clausula group by.

Por ejemplo:
select max(dato)
from tabla.

 
todo sale mejor cuando lo haces con tiempo por malena
Respuesta recibida el [16/07/2008 02:10:45]
sentencias de power builder

 
Tutorial Comentario por Pedro Bedoya Oviedo
Respuesta recibida el [15/09/2008 05:42:47]
Excelente este tutorial qien este empezando como yo le va aparecez lo mejor que hay en la WEB con respecto a Lenguaje SQL


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial SQL Consultas combinadas. JOINSTutorial SQL Subconsultas Versión para imprimir

Consultas agregadas
Autor: Pedro Herrarte Sánchez
Visitas: 40651 Fecha de publicación: 01/01/2006
Pedro Herrarte, es consultor independiente, ofreciendo sercivios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 310 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 85 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 207 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 937 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 209 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 675 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista
Visitas: 455 | Comentarios: 0 | Archivo: Articulos
Categorias: Linux|BSD
Visitas: 236 | Comentarios: 0 | Archivo: Articulos
Categorias: Programación|Actualidad
18/08/2008 SQL Server 2008
Visitas: 1135 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 789 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ

Útimos temas recibidos en los foros ...
Coastal Inversiones SAC Coastal Vacations Oportunidad de Negocios por lecasur ... [ASP.NET] 0 11/10/2008
Negocios Rentables desde tu Hogar Coastal Vacations por lecasur ... [Access] 0 11/10/2008
COASTAL VACATIONS OPORTUNIDAD DE NEGOCIOS RENTABLES por lecasur ... [Actualidad] 0 11/10/2008
hacer el nombre de una tabla variable por leicolei ... [SQL Server] 2 10/10/2008
ayuda por yo ... [C#] 2 09/10/2008
Mostar nombre en una sesion de usuario por jhors ... [ASP.NET] 1 10/10/2008
Analista por Rolando ... [SQL Server] 0 10/10/2008
SQL dinámico en TRIGGERS por Alastor ... [ORACLE] 2 03/10/2008
Crystal Reports 8.5 por selvinalberto ... [Visual Basic 6.0] 0 10/10/2008
Agregar Columnas a un datagridview por Tony ... [Visual Basic .NET] 3 20/11/2007
Problema cargando un pl/sql Embebido en Pro*C por ejrivas ... [ORACLE] 0 10/10/2008
Verificar conexion a internet por giraldo ... [Visual Basic .NET] 3 11/12/2006

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
28/08/2006 Ubuntu en VmWare con VMware Tools
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
03/10/2006 Introduccion a C#    forma parte de...Tutorial C#
27/08/2007 Enviar email con C#
01/06/2007 Autogenerado ESSALUD (Solución)
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL
23/05/2006 Cursores en PL/SQL    forma parte de...Tutorial PL/SQL
06/05/2007 Introducción a Transact SQL    forma parte de...Tutorial de Transact SQL
15/06/2007 Control de errores en Transact SQL    forma parte de...Tutorial de Transact SQL
01/01/2006 Consultas agregadas    forma parte de...Tutorial SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]