[AYUDA] Una mano con Oracle y SQL

A ver si me podéis hechar una mano, que tengo un par de ejercicios de una práctica que no se hacer. Tengo 2 tablas (entre otras, pero para estos ejercicios con estas dos sobran):

CREATE TABLE CASARURAL (
  idcasa   CHAR(4),
  nombre   VARCHAR(30) NOT NULL,
  ciudad   VARCHAR(30) NOT NULL,
  telefono   CHAR(9) NOT NULL,
  CONSTRAINT casarural_pk PRIMARY KEY(idcasa)
);

CREATE TABLE HABITACION (
  idcasa   CHAR(4),
  idhabitacion   CHAR(2),
  numcamas   NUMBER(2) DEFAULT 2 NOT NULL,
  wc      CHAR(1) DEFAULT 'N' NOT NULL,
  precio   NUMBER(5,2) NOT NULL,
  CONSTRAINT habitacion_pk PRIMARY KEY(idcasa, idhabitacion),
  CONSTRAINT habitacion_fk FOREIGN KEY(idcasa)
   REFERENCES CASARURAL(idcasa)
   ON DELETE CASCADE,
  CONSTRAINT habitacion_numcamas CHECK (numcamas IN (1, 2, 3)),
  CONSTRAINT habitacion_wc CHECK (wc IN ('S', 'N')),
  CONSTRAINT habitacion_precio CHECK (precio > 0)
);



Y tengo que hacer estas dos consultas con SELECT (aparte de otras muchas que ya las tengo resueltas):

1. Nombre y ciudad de las casas rurales que tienen más habitaciones dobles que individuales, indicando el número de habitaciones de cada tipo (nombre, ciudad, dobles, individuales).

2. Mostrar las casas rurales (idcasa, nombre) con el mismo número de habitaciones individuales, dobles y triples, así como cuál es dicho número (numhab) y el precio medio de todas sus habitaciones (preciomedio).


El problema lo tengo al trabajar con el campo numcamas, me estoy haciendo la picha un lio... [+risas]

Gracias de antemano y un saludo
Voy a intentar hecharte una mano:

Para el 1) en el WHERE tendras que poner algo como CASARURAL.idcasa = HABITACION.idcasa AND (SELECT COUNT(*) FROM HABITACION WHERE numcamas = 1) < (SELECT COUNT(*) FROM HABITACION WHERE numcamas = 2) con esto o similar servira para localizar casas con mas habitaciones dobles que individuales.

Tiene pinta de ser ejercicios para usar COUNT a si que haz pruebas con el, y con lo que te he pasado, no se si funcionará ya que normalmente hago las consultas poco a poco probando y mirando los resultados que voy obteniendo.

Suerte.
SELECT H.idcasa
FROM CASARURAL C JOIN HABITACION H ON C.idcasa=H.idcasa
WHERE ((SELECT COUNT(*)
            FROM HABITACION H
            WHERE H.numcamas=2
            GROUP BY H.idcasa) >
            (SELECT COUNT(*)
            FROM HABITACION H
            WHERE H.numcamas=1
            GROUP BY H.idcasa))
--


Resultado: ORA-01427: la subconsulta de una sola fila devuelve más de una fila


Sugerencias??
2 respuestas