|
@@ -16,7 +16,7 @@ FROM Rooms;
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
id | home_type | has_tv | price
|
|
id | home_type | has_tv | price
|
|
|
-:--:|--------------:|:---------:|:-------:
|
|
|
|
|
|
|
+:--:|---------------|:---------:|:-------:
|
|
|
1 | Private room | 1 | 149
|
|
1 | Private room | 1 | 149
|
|
|
2 | Entire home/apt | 0 | 225
|
|
2 | Entire home/apt | 0 | 225
|
|
|
3 | Private room | 1 | 150
|
|
3 | Private room | 1 | 150
|
|
@@ -101,7 +101,7 @@ GROUP BY home_type
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
home_type | avg_price
|
|
home_type | avg_price
|
|
|
- ------------|-------------
|
|
|
|
|
|
|
+ ------------|-------------:
|
|
|
Private room | 89.4286
|
|
Private room | 89.4286
|
|
|
Entire home/apt | 148.6667
|
|
Entire home/apt | 148.6667
|
|
|
Shared room | 40
|
|
Shared room | 40
|
|
@@ -141,7 +141,7 @@ GROUP BY home_type
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
home_type | avg_price
|
|
home_type | avg_price
|
|
|
-------------|:------------:
|
|
|
|
|
|
|
+------------|------------:
|
|
|
Private room | 89.4286
|
|
Private room | 89.4286
|
|
|
Entire home/apt | 148.6667
|
|
Entire home/apt | 148.6667
|
|
|
Shared room | 40
|
|
Shared room | 40
|
|
@@ -150,11 +150,11 @@ Shared room | 40
|
|
|
|
|
|
|
|
* `SUM(поле_таблицы)` - Возвращает сумму значений
|
|
* `SUM(поле_таблицы)` - Возвращает сумму значений
|
|
|
* `AVG(поле_таблицы)` - Возвращает среднее значение
|
|
* `AVG(поле_таблицы)` - Возвращает среднее значение
|
|
|
-* `COUNT(поле_таблицы)` - Возвращает количество записей
|
|
|
|
|
|
|
+* `COUNT(поле_таблицы | *)` - Возвращает количество записей
|
|
|
* `MIN(поле_таблицы)` - Возвращает минимальное значение
|
|
* `MIN(поле_таблицы)` - Возвращает минимальное значение
|
|
|
* `MAX(поле_таблицы)` - Возвращает максимальное значение
|
|
* `MAX(поле_таблицы)` - Возвращает максимальное значение
|
|
|
|
|
|
|
|
->Агрегатные функции применяются для значений, не равных `NULL`. Исключением является функция `COUNT(*)`.
|
|
|
|
|
|
|
+>Агрегатные функции применяются для значений, не равных `NULL`. Исключением является функция `COUNT(*)` (она считает количество записей в группе).
|
|
|
|
|
|
|
|
### Примеры
|
|
### Примеры
|
|
|
|
|
|
|
@@ -172,7 +172,7 @@ Shared room | 40
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
home_type | amount
|
|
home_type | amount
|
|
|
- ------------|:---:
|
|
|
|
|
|
|
+ ------------|---:
|
|
|
Private room | 28
|
|
Private room | 28
|
|
|
Entire home/apt | 21
|
|
Entire home/apt | 21
|
|
|
Shared room | 1
|
|
Shared room | 1
|
|
@@ -188,7 +188,7 @@ Shared room | 40
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
room_id | last_end_date
|
|
room_id | last_end_date
|
|
|
- --------|---
|
|
|
|
|
|
|
+ :------:|---
|
|
|
1 | 2019-02-04T12:00:00.000Z
|
|
1 | 2019-02-04T12:00:00.000Z
|
|
|
2 | 2020-03-23T09:00:00.000Z
|
|
2 | 2020-03-23T09:00:00.000Z
|
|
|
13 | 2020-04-21T10:00:00.000Z
|
|
13 | 2020-04-21T10:00:00.000Z
|
|
@@ -210,7 +210,7 @@ GROUP BY home_type
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
home_type | avg_price
|
|
home_type | avg_price
|
|
|
-------------|:------------:
|
|
|
|
|
|
|
+------------|------------:
|
|
|
Private room | 89.4286
|
|
Private room | 89.4286
|
|
|
Entire home/apt | 148.6667
|
|
Entire home/apt | 148.6667
|
|
|
Shared room | 40
|
|
Shared room | 40
|
|
@@ -240,7 +240,7 @@ HAVING avg_price > 50
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
home_type | avg_price
|
|
home_type | avg_price
|
|
|
-------------|:---:
|
|
|
|
|
|
|
+------------|---:
|
|
|
Private room | 89.4286
|
|
Private room | 89.4286
|
|
|
Entire home/apt | 148.6667
|
|
Entire home/apt | 148.6667
|
|
|
|
|
|
|
@@ -264,11 +264,11 @@ GROUP BY home_type
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
home_type | avg_price
|
|
home_type | avg_price
|
|
|
-------------|:---:
|
|
|
|
|
|
|
+------------|---:
|
|
|
Private room | 96.875
|
|
Private room | 96.875
|
|
|
Entire home/apt | 148.6667
|
|
Entire home/apt | 148.6667
|
|
|
|
|
|
|
|
->Но если присмотреться к результату, то видно, что средняя цена получилась завышенной. И это очевидно, так как мы просто выкинули низкие цены.
|
|
|
|
|
|
|
+>Но, если присмотреться к результату, то видно, что средняя цена получилась завышенной. И это очевидно, так как мы просто выкинули низкие цены.
|
|
|
|
|
|
|
|
### Пример использования HAVING
|
|
### Пример использования HAVING
|
|
|
|
|
|
|
@@ -334,7 +334,7 @@ FROM Payments
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
family_member | price
|
|
family_member | price
|
|
|
----|:---:
|
|
|
|
|
|
|
+:---:|---:
|
|
|
1 | 2000
|
|
1 | 2000
|
|
|
2 | 2100
|
|
2 | 2100
|
|
|
3 | 100
|
|
3 | 100
|
|
@@ -377,7 +377,7 @@ JOIN FamilyMembers
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
family_member | member_name | price
|
|
family_member | member_name | price
|
|
|
-:---:|---|:---:
|
|
|
|
|
|
|
+:---:|---|---:
|
|
|
1 | Headley Quincey | 2000
|
|
1 | Headley Quincey | 2000
|
|
|
2 | Flavia Quincey | 2100
|
|
2 | Flavia Quincey | 2100
|
|
|
3 | Andie Quincey | 100
|
|
3 | Andie Quincey | 100
|
|
@@ -449,7 +449,7 @@ SELECT pass.id, pass.name
|
|
|
FROM Passenger AS pass
|
|
FROM Passenger AS pass
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
->Ключевое слово AS является опциональным, как и у псевдонимов столбцов.
|
|
|
|
|
|
|
+>Ключевое слово AS является не обязательным, как и у псевдонимов столбцов.
|
|
|
|
|
|
|
|
Рассмотрим пример запроса с несколькими таблицами. Допустим, нам нужно вывести идентификаторы и имена пассажиров, которые хотя бы раз совершали перелёт:
|
|
Рассмотрим пример запроса с несколькими таблицами. Допустим, нам нужно вывести идентификаторы и имена пассажиров, которые хотя бы раз совершали перелёт:
|
|
|
|
|
|