Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

consulta sql

Estas en el tema de consulta sql en el foro de Oracle en Foros del Web. Hola gente, tengo la siguiente duda... Si tengo las 2 siguientes tablas: CREATE TABLE PRODUCCIONES ( titulo VARCHAR2(50) NOT NULL, nacionalidad VARCHAR2(14) NOT NULL, vo ...
  #1 (permalink)  
Antiguo 14/04/2011, 09:59
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años
Puntos: 0
consulta sql

Hola gente, tengo la siguiente duda...
Si tengo las 2 siguientes tablas:

CREATE TABLE PRODUCCIONES (
titulo VARCHAR2(50) NOT NULL,
nacionalidad VARCHAR2(14) NOT NULL,
vo VARCHAR2(12) NOT NULL,
anno INTEGER NOT NULL,
genero VARCHAR2(15) NOT NULL,
duracion INTEGER NOT NULL,
taquilla VARCHAR2(9) NOT NULL,
director CHAR(9) NOT NULL,
actores CHAR(9) NOT NULL,
guionistas CHAR(9) NOT NULL,
banda CHAR(50) NOT NULL,
sala CHAR(50) NOT NULL,
CONSTRAINT pk_produccion PRIMARY KEY (titulo),
CONSTRAINT fk_banda FOREIGN KEY (banda) REFERENCES BANDAS(banda_titulo));

CREATE TABLE SALAS(
sala_nombre VARCHAR2(50) NOT NULL,
sala_butacas INTEGER NOT NULL,
sala_f_inicio DATE NOT NULL,
sala_f_fin DATE NOT NULL,
sala_produccion CHAR(50),
CONSTRAINT pk_sala PRIMARY KEY (sala_nombre),
CONSTRAINT ck_fecha CHECK (TO_CHAR(sala_f_fin,'YYYYMMDD') > TO_CHAR(sala_f_inicio,'YYYYMMDD')),
CONSTRAINT fk_produccion FOREIGN KEY (sala_produccion) REFERENCES PRODUCCIONES(titulo));

Como puedo mostrar el titulo de la produccion que se ha exhibido en más salas???
Espero alguna sugerencia.
Muchas gracias.
  #2 (permalink)  
Antiguo 14/04/2011, 14:38
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: consulta sql

Hola pepe_barckley

Lo primero que tendrías que hacer es un GROUP BY a tu tabla SALAS por el campo sala_produccion, poniendo un count() en el select para que obtener el número de salas que exhiben cada título. Una vez que tengas esto puedes hacer una subconsulta, para obtener el MAX() del número de exhibiciones... no veo muy complicada al consulta, intenta hacerla y si tienes problemas lo comentas en el foro, pones algo del código que haz intentado hacer y si se puede algunos datos de ejemplo. De esta manera será más fácil tratar de ayudarte.

Saludos
Leo
  #3 (permalink)  
Antiguo 14/04/2011, 16:43
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta sql

Entonces seria algo asi...

SELECT sala_produccion COUNT (sala_produccion) FROM SALAS GROUP BY sala_produccion
SELECT MAX (sala_produccion)

Aunque en este caso en el primer SELECT daria igual el atributo que pusiera no? porque luego lo ordeno por sala_produccion no??

Dime haber que te parece..
Muchas gracias Leo.
Un saludo.
  #4 (permalink)  
Antiguo 15/04/2011, 08:41
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: consulta sql

Hola pepe_barckley:

Mira, la consulta debería quedar más o menos así

Código:
Select sala_produccion, max(total_salas) from
(
select sala_produccion, count() total_salas
***
***
)
T

Es decir, el select interno (que contiene el count()) obtiene cuantas veces se ha exhibido cada producción, espero que para obtener esta consulta no tengas problemas, es más, creo que la primer consulta que pones en tu post debería funcionar. El select externo (que contiene el max()) toma como insumo la consulta interna y obtiene el máximo número de exhibiciones. Casi lo logras compañero, haz los ajustes necesarios y si continuas con problemas lo comentas y te tratamos de apoyar.

saludos
Leo.
  #5 (permalink)  
Antiguo 16/04/2011, 04:57
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años
Puntos: 0
Respuesta: consulta sql

Genial! mucas gracias Leo!
Si más adelente tengo problemas os lo comentare

Etiquetas: sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:09.