SQL - Consulta sql

   
Vista:

Consulta sql

Publicado por fernando (6 intervenciones) el 03/07/2017 22:13:19
Hola comunidad tengo estas tablas:

Congreso (CodCong, NomCong, CostoIndiv, CantInscr, , NomOrganizador) PK:CodCong

Disertante (CodDis, NomDis, Curriculum) PK:CodDis

Sala (NroSala, NomSala, Capacidad, AireAcond, CabTrad) PK:NroSala

Conferencia (CodConf, NomConf, DescrConf, CodDis, CodCong, Fecha, Hora, Duración, NroSala)

PK:CodConf, FK:CodCong-->Congreso, FK:NroSala-->Sala, FK:CodDis-->Disertante


Se me pide esto:

Listar todos los datos de los congresos tal que hayan tenido o tengan en su planificación más de 100
disertantes diferentes.

Le meti estos dos insert:

insert into Conferencia values ('codigoCon1','conferencia1','desc1','codigoD1',
'codigoC1','1/1/2017',3,1)

insert into Conferencia values ('codigoCon2','conferencia1','desc1','codigoD1',
'codigoC1','1/1/2017',3,1)

Y esta es la consulta:

select distinct (con.CodDis) from congreso c, conferencia con where c.CodCong=con.CodCong group by
con.CodDis having count(CodDis)>1

El problema es que no me tendría que funcionar ya que tengo en la conferencia el mismo disertante y se me pide que los disertantes sean diferentes, desde ya gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Consulta sql

Publicado por Isaias (1176 intervenciones) el 04/07/2017 00:42:19
¿En que motor de base de datos (version)?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta sql

Publicado por fernando (6 intervenciones) el 04/07/2017 00:49:00
Hola isaias, estoy con SQL Server 2014 Management Studio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Consulta sql

Publicado por Isaias (1176 intervenciones) el 04/07/2017 01:13:08
¿Porque usas un GROUP BY en tu SELECT?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Manuel

Consulta sql

Publicado por Manuel (19 intervenciones) el 05/07/2017 17:48:36
Si usa un having pues tiene que usar un group by
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Consulta sql

Publicado por Isaias (1176 intervenciones) el 05/07/2017 18:46:50
Manuel, gracias por la respuesta, aun tengo mis dudas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Manuel

Consulta sql

Publicado por Manuel (19 intervenciones) el 07/07/2017 11:07:11
Un placer. La clausula Having sirve para filtrar grupos. Where filtra registros individuales/filas de lo que ofrece el from (en cristiano decide que filas de la fuente de datos entran a formar parte de la consulta), group by agrupa esas filas según criterios y having filtras las filas de lo agrupado. Por lo anterior, no tiene sentido que haya un having sin un group by... aunque depende del SGBD pues puede aceptar consultas así, en donde hay una doble consulta o incluso usar having en lugar de where (como cada fabricante hace lo que le sale de los cojones, pues después ves de todo y muchos "profesionales", como se lo acepta su SGBD pues hacen cada "consulta" que es para echarse a reír, o llorar).

Ten en cuenta que hay un orden en cuanto al procesamiento de consultas en SQL, y por eso hace falta que exista Where y Having, porque Where siempre se ejecuta antes de group by (si es que lo hay)... si no hubiese having, no podrías filtrar el resultado de agrupar con group by.

Por qué funciona en algunos SGBD (realmente en muchos) permiten poner un having aunque no haya un group by... pues sencillo, porque realmente si lo hay, igual que hay un Where aunque no hayas filtrado. El interprete SQL hace el paso si o sí, si no hay un criterio en la consulta, pues usa el por defecto, que por ejemplo en Where es todas las filas, si después no hay un group by, pues básicamente las envía tal cual al siguiente paso (al having), que llegados a este paso se puede volver a filtrar pero de esta vez supuestamente lo que tienes ya son grupos y así aplicar funciones de agregado.

Ahora bien, que alguno consigue el mismo resultado, no implica que sea del todo correcto, ya que el resultado puede ser el mismo, pero los costes computacionales de procesar la consulta no son los mismos... en el Where debe filtrarse lo máximo posible y en el having solo filtrar grupos (y solo debería filtrarse por funciones de agregado, por ejemplo los que hayan sumado más de x cantidad del tal campo, los que tengan más de x ventas, etc). Aunque hoy en día no es tan grave como usar mal las subconsultas, ya que SGBD como SQL Server preprocesan toda consulta SQL y cuando detectan que se está filtrando en el having algo que debió filtrarse en el where, pues automáticamente crean una consulta optimizada equivalente. Pero eso no siempre funciona.

hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Consulta sql

Publicado por Isaias (1176 intervenciones) el 07/07/2017 16:51:51
Muchas gracias Manuel

No es en realidad al GROUP BY con el HAVING, si no a la duda inicial de Fernando

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad