InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
SQL
  Tutorial SQL
SQL Server
  Tutorial de Transact-SQL
ORACLE
  Tutorial PL/SQL
.NET
  Introducción a.NET
  Conceptos generales .NET
  Tutorial C#
  LinQ
  WCF
Reina Roja
  Humor
  Bibliografia
  Acerca de ...

Afiliados
La Web del programador
MundoProgramacion

having
tema iniciado porsara en SQL
Mensaje recibido el [06/04/2006 09:39:56]



HOLA QUERIA SABER PORQUE SE PONE ANTES HAVING EN ESTA CONSULTA.

SELECT estante, sum(ejemplares) FROM LIBRERIA
HAVING SUM(ejemplares) =
(SELECT MAX(SUM(ejemplares)) FROM LIBRERIA GROUP BY estante)
GROUP BY estante;

E SUM(EJEMPLARES)
- ---------------
A 36

 RE: having por Devjoker [06/04/2006 11:22:06]
 RE: having por sara [06/04/2006 12:14:30]
 RE: having por Devjoker [06/04/2006 12:19:29]
 RE: having por sara [06/04/2006 12:42:06]
 RE: having por devjoker [06/04/2006 03:42:40]
 RE: having por sara [07/04/2006 06:27:50]
 RE: having por Devjoker [07/04/2006 06:48:52]
 RE: having por Robincillo [13/03/2008 12:34:55]

 
RE: having por Devjoker
Respuesta recibida el [06/04/2006 11:22:06]

En esta consulta se utiliza HAVING porque estas comparando contra un agregado, SUM.

Having no hace la consulta más reestriva como WHERE, sino que la filtra una vez ejecutada. Primero necesitas contar los "ejemplares" de todos los "estantes", y luego ver cual es el que más libros tiene.

¿Me he he explicado?

Saludos.

DJK

 


 
RE: having por sara
Respuesta recibida el [06/04/2006 12:14:30]
SALE EL MISMO RESULTADO?

si lo pones al reves

SELECT estante, sum(ejemplares) FROM LIBRERIA
group by estante
having sum(ejemplares)=(SELECT MAX(SUM(ejemplares)) FROM LIBRERIA GROUP BY estante);

ESTO A QUE SE DEBE ¿?

 
RE: having por Devjoker
Respuesta recibida el [06/04/2006 12:19:29]

Creo que no has entendido bien las respuesta anterior....

HAVING se evalúa despues de ejecutar las SUMA, mientra que WHERE lo hace antes. No tiene nada que ver con si se escribe antes o despues del group by.

Por ejemplo

select cod_provincia, count(*)
from CAT_PROVINCIA           
WHERE count(*) = 1           
group by cod_provincia ;      

Esta sentecia falla porque cuando se quiere evaluar el WHERE no tenemos el count. Sin embargo HAVING se evalua despues de realizar el count, por lo que funciona perfectamente.

select cod_provincia, count(*)
from CAT_PROVINCIA           
having count(*) = 1          
group by cod_provincia       

select cod_provincia, count(*)
from CAT_PROVINCIA           
group by cod_provincia  
having count(*) = 1          

 

 


 
RE: having por sara
Respuesta recibida el [06/04/2006 12:42:06]
pero eso de que no tenemos el count en el where a que te refieres¿?

 
RE: having por devjoker
Respuesta recibida el [06/04/2006 03:42:40]

Me refiero a como se procesa una instrucción SQL.

Para poder "seleccionar" la "librería" que tenga el maximo número de "ejemplares" primero debemos contar "contar" cuantos libros tienen todas y cada una de la "librerias". Una vez que ya sabemos cuantos libros hay en cada libreria poder decir cual (o cuales) tienen más libros.

Por eso no nos vale usar una clausula WHERE, porque WHERE se evalua antes de que hayamos contado los libros. HAVING, sin embargo, "espera" a contar todos los libros y luego escoje los que cumplen la condición.

Saludos,

DJK 


 
RE: having por sara
Respuesta recibida el [07/04/2006 06:27:50]
o sea que lo que me has querido decir que un where se evalua primero la condicion del where y luego el select cod_provincia,count(*)

mientras que el having hace primero select cod_provincia,count(*) y una vez realizado se evalua la condicion del having no ¿?


 
RE: having por Devjoker
Respuesta recibida el [07/04/2006 06:48:52]
Asé es. :-)

 
RE: having por Robincillo
Respuesta recibida el [13/03/2008 12:34:55]
Gracias amigo por la buena explicion!! excelente


 

Email:*
Alias:*
Título:*
Respuesta:*
Notificar:
(Indica si queremos recibir emails)

 
 

devjoker  Te recomendamos además ...
10/07/2006 Subprogramas en PL/SQL    forma parte de...Tutorial PL/SQL
19/10/2005 Configurar el IIS para ejecutar aplicaciones ASP.net
27/08/2007 Enviar email con C#
22/10/2005 Vistas    forma parte de...Tutorial SQL
10/07/2006 Funciones en PL/SQL    forma parte de...Tutorial PL/SQL
29/09/2006 Assemblies    forma parte de...Conceptos generales .NET
01/01/2005 Bases de datos.    forma parte de...Iniciación a las bases de datos
22/10/2005 Componentes del lenguaje SQL    forma parte de...Tutorial SQL
27/10/2006 Eventos    forma parte de...Tutorial C#
03/10/2006 Instrucciones    forma parte de...Tutorial C#

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]