Browse Source

проценты

Евгений Колесников 11 tháng trước cách đây
mục cha
commit
5401ec6dbc
1 tập tin đã thay đổi với 18 bổ sung16 xóa
  1. 18 16
      data/module2.md

+ 18 - 16
data/module2.md

@@ -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),