Используются следующие таблицы:
CREATE TABLE IF NOT EXISTS planta(
codigo int PRIMARY KEY NOT NULL AUTO_INCREMENT,
especialidad varchar(25) NOT NULL
)ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS habitacion(
id int PRIMARY KEY NOT NULL AUTO_INCREMENT,
numero_camas int NOT NULL,
planta_id int NOT NULL,
FOREIGN KEY (planta_id) REFERENCES planta(codigo)
)ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS paciente(
dni varchar(9) PRIMARY KEY NOT NULL,
num_ss varchar(10) NOT NULL,
nombre varchar(20) NOT NULL,
direccion varchar(50) NOT NULL,
tratamiento mediumtext NOT NULL,
diagnostico mediumtext NOT NULL,
habitacion_id int NOT NULL,
medico_id int NOT NULL,
FOREIGN KEY (habitacion_id) REFERENCES habitacion(id),
FOREIGN KEY (medico_id) REFERENCES medico(num_colegiado)
)ENGINE=InnoDB;
Запрос такой:
SELECT planta.codigo AS Floor_id, habitacion.id AS Room_id, numero_camas - count(dni) AS Free_beds
FROM habitacion, paciente, planta
WHERE planta_id = planta.codigo AND habitacion_id = habitacion.id
GROUP BY planta.codigo, habitacion.id;
Возвращает результаты:
Floor id | Room id | Free beds
1 1 1
1 2 1
2 3 3
Но я хочу это:
Floor id | Rooms | Free beds
1 2 2
2 1 3
Я думаю, что у меня много проблем, потому что сначала я должен подсчитать, сколько кроватей свободно в каждой комнате (я делаю это, вычитая количество кроватей в комнате минус людей, которыеназначен в эту комнату).
Мне было интересно, можно ли каким-либо образом сгруппировать результаты, полученные по текущему запросу.