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

Afiliados
La Web del programador
MundoProgramacion

having
tema iniciado por sara
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 ...
13/07/2006 Paquetes en PL/SQL    forma parte de...Tutorial PL/SQL
02/10/2006 Tablas unidimensionales    forma parte de...Tutorial C#
03/01/2007 Tipos anulables    forma parte de...Tutorial C#
31/03/2006 Fundamentos de PL/SQL    forma parte de...Tutorial PL/SQL
03/10/2006 Miembros de tipo    forma parte de...Tutorial C#
21/07/2006 Funciones integradas de PL/SQL    forma parte de...Tutorial PL/SQL
28/08/2006 Ubuntu en VmWare con VMware Tools
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
24/05/2007 Tipos de datos en Transact SQL    forma parte de...Tutorial de Transact SQL
12/01/2006 Programación con PL/SQL    forma parte de...Tutorial PL/SQL

Encuesta
¿Cual es tu lenguaje de programación favorito?
[Ver] [Votar]