|
|
@@ -177,8 +177,8 @@ SELECT SUM(
|
|
|
LEAST(b.dateTo, '2025-02-28'),
|
|
|
GREATEST(b.dateFrom, '2025-02-01')
|
|
|
)
|
|
|
-) as res
|
|
|
-from Booking b;
|
|
|
+) AS res
|
|
|
+FROM Booking b;
|
|
|
```
|
|
|
|
|
|
где функция **LEAST** возвращает минимум из двух значений, а функция **GREATEST** возвращает максимум из двух значений (**MIN** и **MAX** являются аггрегатными функциями)
|
|
|
@@ -200,8 +200,8 @@ SELECT SUM(
|
|
|
),
|
|
|
0
|
|
|
)
|
|
|
-) as res
|
|
|
-from Booking b;
|
|
|
+) AS res
|
|
|
+FROM Booking b;
|
|
|
```
|
|
|
|
|
|
Ещё нужно учитывать количество ночей в знаменателе:
|
|
|
@@ -217,8 +217,8 @@ SELECT (SUM(
|
|
|
)
|
|
|
)) / (
|
|
|
SELECT count(*) * DATEDIFF('2025-02-28', '2025-02-01') FROM Room
|
|
|
-) as res
|
|
|
-from Booking b;
|
|
|
+) AS res
|
|
|
+FROM Booking b;
|
|
|
```
|
|
|
|
|
|
Можно завернуть это в пользовательскую функцию
|
|
|
@@ -227,10 +227,10 @@ from Booking b;
|
|
|
DROP FUNCTION IF EXISTS PercentLoad;
|
|
|
DELIMITER //
|
|
|
CREATE FUNCTION PercentLoad(df DATE, dt DATE)
|
|
|
-returns real
|
|
|
+RETURNS REAL
|
|
|
DETERMINISTIC
|
|
|
BEGIN
|
|
|
- DECLARE result real DEFAULT 0;
|
|
|
+ DECLARE result REAL DEFAULT 0;
|
|
|
SELECT (SUM(
|
|
|
GREATEST(
|
|
|
DATEDIFF(
|
|
|
@@ -240,12 +240,13 @@ BEGIN
|
|
|
0
|
|
|
)
|
|
|
)) / (
|
|
|
- SELECT count(*) * DATEDIFF(dt, df)
|
|
|
+ SELECT COUNT(*) * DATEDIFF(dt, df)
|
|
|
FROM Room
|
|
|
)
|
|
|
INTO result
|
|
|
- from Booking b;
|
|
|
- return result;
|
|
|
+ FROM Booking b;
|
|
|
+
|
|
|
+ RETURN result;
|
|
|
END//
|
|
|
DELIMITER ;
|
|
|
```
|
|
|
@@ -253,5 +254,5 @@ DELIMITER ;
|
|
|
И использовать её при необходимости
|
|
|
|
|
|
```sql
|
|
|
-select PercentLoad('2025-02-01', '2025-02-28');
|
|
|
+SELECT PercentLoad('2025-02-01', '2025-02-28');
|
|
|
```
|