SQL-запросы очень похожи и отличаются только последним выражением в блоке
SELECT. Оба запроса выбирают (оператор
SELECT) из слоя районов Москвы (
FROM moscow_al8):
- уникальный идентификатор объекта (колонка orbis_id),
- геоданные (колонка geom),
- название района (колонка localname) с псевдонимом name.
При этом, c выборкой из
moscow_al8 объединяются данные из таблицы парковок (
INNER JOIN parking) со следующими условиями (
ON):
- parking.place_price IS NOT NULL — должна быть указана стоимость парковки,
- parking.place_period = 'Цена за час' — нас интересует только стоимость часа парковки,
- ST_Contains(moscow_al8.geom, parking.geom) — функция PostGIS, проверяющая, что все точки геометрии объекта парковок (parking) находятся внутри региона Москвы (moscow_al8).
На данном этапе результатом работы запроса является объединение двух множеств по нескольким условиям. Объекты, не удовлетворяющие условиям объединения, отбрасываются (
INNER JOIN).
По условиям задачи данного примера необходимо получить агрегированные данные по районам Москвы, поэтому выборки группируются (
GROUP BY) по тем же колонкам, что были перечислены в блоке
SELECT. Таким образом определяются категории объектов, по которым осуществляется группировка данных. Для таких категорий могут быть вычислены выражения, использующие агрегирующие функции — такие как
COUNT (количество объектов),
SUM (сумма),
AVG (среднее) и другие.
Теперь отличающиеся строки запросов должны стать понятнее:
- Вычисляется средняя цена в каждой категории сгруппированных объектов.