|
|
@@ -129,6 +129,16 @@ where ri.Категория = rt.title
|
|
|
|
|
|
**Создайте запрос вычисляющий процент загрузки номерного фонда** – это отношение количества проданных ночей к общему количеству номеров в отеле.
|
|
|
|
|
|
+>% загрузки номерного фонда = количество проданных ночей за расчётный период / общее
|
|
|
+количество номеров за тот же период * 100%.
|
|
|
+>
|
|
|
+>Пример расчёта:
|
|
|
+>
|
|
|
+>Гостиница на 100 номеров, расчёт загрузки за месяц (30 дней). Продано (занято) было за месяц
|
|
|
+2100 номер ночей. Всего в месяце = 100 номеров * 30 дней = 3 000 номер ночей. Загрузка за расчётный
|
|
|
+период = 2100 / 3000 * 100% = 70%
|
|
|
+
|
|
|
+
|
|
|
Перед выполнением этого задания нужно добавить пару записей в таблицу **Booking** (а перед этим и в **User**)
|
|
|
|
|
|
В информации о брони у нас есть даты заезда и выезда. Для нахождения количества дней между двумя датами в SQL есть функция **DATEDIFF**
|
|
|
@@ -145,33 +155,25 @@ SELECT SUM( DATEDIFF(b.dateTo, b.dateFrom) )
|
|
|
FROM Booking b;
|
|
|
```
|
|
|
|
|
|
-Остаётся просто разделить на общее количество номеров:
|
|
|
+Остаётся просто разделить на общее количество номеров помноженное на количество дней (пока подставляем константу 30 дней):
|
|
|
|
|
|
```sql
|
|
|
-SELECT COUNT(*) FROM Room;
|
|
|
+SELECT COUNT(*) * 30 FROM Room;
|
|
|
```
|
|
|
|
|
|
Итоговый скрипт будет выглядеть так:
|
|
|
|
|
|
```sql
|
|
|
SELECT (
|
|
|
- SELECT SUM( DATEDIFF(b.dateTo, b.dateFrom) )
|
|
|
+ SELECT SUM( DATEDIFF(b.dateTo, b.dateFrom) ) * 100
|
|
|
FROM Booking b
|
|
|
) / (
|
|
|
- SELECT COUNT(*) FROM Room
|
|
|
+ SELECT COUNT(*) * 30 FROM Room
|
|
|
);
|
|
|
```
|
|
|
|
|
|
-Для демо-экзамена этого достаточно, но желательно добавить выборку за указанный диапазон и учесть, что в знаменателе тоже надо учитывать диапазон.
|
|
|
+Для демо-экзамена этого достаточно, но желательно добавить выборку за указанный диапазон.
|
|
|
|
|
|
->% загрузки номерного фонда = количество проданных ночей за расчётный период / общее
|
|
|
-количество номеров за тот же период * 100%.
|
|
|
->
|
|
|
->Пример расчёта:
|
|
|
->
|
|
|
->Гостиница на 100 номеров, расчёт загрузки за месяц (30 дней). Продано (занято) было за месяц
|
|
|
-2100 номер ночей. Всего в месяце = 100 номеров * 30 дней = 3 000 номер ночей. Загрузка за расчётный
|
|
|
-период = 2100 / 3000 * 100% = 70%
|
|
|
|
|
|
В исходных данных два бронирования:
|
|
|
|
|
|
@@ -215,10 +217,10 @@ SELECT SUM(
|
|
|
FROM Booking b;
|
|
|
```
|
|
|
|
|
|
-Ещё нужно учитывать количество ночей в знаменателе:
|
|
|
+Ещё нужно учитывать количество ночей в знаменателе. Итоговый запрос будет таким:
|
|
|
|
|
|
```sql
|
|
|
-SELECT (SUM(
|
|
|
+SELECT 100 * (SUM(
|
|
|
GREATEST(
|
|
|
DATEDIFF(
|
|
|
LEAST(b.dateTo, '2025-02-28'),
|
|
|
@@ -242,7 +244,7 @@ RETURNS REAL
|
|
|
DETERMINISTIC
|
|
|
BEGIN
|
|
|
DECLARE result REAL DEFAULT 0;
|
|
|
- SELECT (SUM(
|
|
|
+ SELECT 100 * (SUM(
|
|
|
GREATEST(
|
|
|
DATEDIFF(
|
|
|
LEAST(b.dateTo, dt),
|