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 ...
Instalar SQL server enterprise en Vista o XP
¿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

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

 
prueba por tutorial
Respuesta recibida el [22/10/2008 12:15:05]
mysql ok

 
mysql por david
Respuesta recibida el [22/10/2008 12:18:11]
una buena base de datos mysql

 
Excelente por MilooliM
Respuesta recibida el [28/11/2008 03:34:54]
 < b Gracias!!< / b > me hacia falta un tuto como este para aclarar el funcionamiento de Group By ????

 
lol por xxx
Respuesta recibida el [28/11/2008 03:36:00]
< b > hola < / b >

 
Pregunta avg(suma) por Raúl
Respuesta recibida el [17/12/2008 10:41:06]
Hola, yo quiero obtener al promedio general de las compras de todos los clientes; sql me reconoce la siguiente sentencia?? estaria bien hacerlo asi:

select avg(sum(a.cantidad_compra))
from tabla1 a, tabla2 b
where a.indice = b.indice

 
mil gracias... por Anónimo
Respuesta recibida el [08/01/2009 11:35:20]
mil gracias


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: 46182 Fecha de publicación: 01/01/2006
Pedro Herrarte, es consultor independiente, ofreciendo servicios 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: 42 | Comentarios: 0 | Archivo: Articulos
Visitas: 109 | Comentarios: 0 | Archivo: Articulos
Visitas: 155 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 33 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS
Visitas: 285 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Basic .NET|C#
Visitas: 842 | Comentarios: 2 | Archivo: Articulos
Categorias: C#|ASP.NET|HTML DHTML|XML|JavaScript|ASP.NET|ASP|PHP|Visual Studio
Visitas: 712 | Comentarios: 1 | Archivo: Articulos
Categorias: Administración|Tutorial SQL
Visitas: 451 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 1053 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|CSS|ASP.NET
Visitas: 250 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS

Útimos temas recibidos en los foros ...
FORMULARIO ACCESS por jcifuentes ... [Access] 11 29/05/2007
Ysmael por Ysmael ... [SQL] 0 08/01/2009
Reflection por Maurito22 ... [C#] 2 06/01/2009
Programador por Robert ... [ORACLE] 0 07/01/2009
como insertar registros en un formulario de visual basic.net desde la base de datos sql server por orlan ... [SQL Server] 8 09/06/2008
quierocodigo de autogenerado del seguro por edwin garcia ramirez ... [Visual Basic .NET] 0 07/01/2009
Video gratis sobre AJAX con ASP.NET por alexxe ... [ASP.NET] 1 06/01/2009
calcular saldo acumulativo por cben ... [SQL] 5 30/12/2008
comparar 2 campos de 2 tablas usando el like por nani ... [SQL Server] 1 06/01/2009
Apagar ordenador remoto en C# por victoryiyo ... [C#] 1 07/01/2009
numero de AUTOGENERADO IPSS por carlos ... [Visual Basic .NET] 5 30/10/2008
Como mandar mensaje a Celular por Pako ... [C#] 63 13/03/2007

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 ...
26/07/2006 PL/SQL y Java    forma parte de...Tutorial PL/SQL
26/08/2007 Transacciones en Transact SQL    forma parte de...Tutorial de Transact SQL
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL
02/09/2007 Procedimientos almacenados en Transact SQL    forma parte de...Tutorial de Transact SQL
21/02/2007 BULK COLLECT    forma parte de...Tutorial PL/SQL
18/10/2005 Enviar emails a través de un servidor SMTP autenticado con Java
28/04/2007 Como aumentar el número de descargas simultaneas en Internet Explorer.
06/05/2007 Programación con Transact SQL    forma parte de...Tutorial de Transact SQL
06/05/2007 Introducción a Transact SQL    forma parte de...Tutorial de Transact SQL
30/11/2008 Nuevo control Chart para ASP.NET

 

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