Режим расчета точек, попадающих в каждый полигон - PullRequest
0 голосов
/ 22 июня 2019
  • У меня есть две таблицы в SQL Server.
  • Точки адреса и районы района
  • Оба имеют поля geom и имеют общий SRID
  • Точки адреса имеютполе целочисленного значения.

Для каждого района я хочу выбрать режим этого поля значения из всех адресных точек, входящих в него.

Мне удалось получить обновление для расчета среднего значения.Но мне нужен режим.Мне нужно знать, какое значение является наиболее повторяющимся для каждого района

UPDATE 
        DISTRICTS 
    SET AverageOfValue = (
        SELECT Avg(Address_Value)
            FROM Address A with (index(OBJECTID))
        WHERE DISTRICTS.Shape.STIntersects(A.Shape) = 1 AND Address.Address_Value is not null)

Я изо всех сил пытаюсь адаптировать его для расчета режима.Как мне это сделать?

например, если следующая таблица является подмножеством всех адресных точек, которые попадают в конкретный район, значение режима, которое я ищу для извлечения, будет равно 8, и обновим поле ModeValueобратно в районный слой.

+----------+---------------+
| OBJECTID | Address_Value |
+----------+---------------+
|       23 |             8 |
|       29 |             8 |
|       35 |             5 |
|       42 |             4 |
|       44 |             8 |
|       47 |             9 |
|       58 |             8 |
+----------+---------------+

1 Ответ

1 голос
/ 22 июня 2019

Режим является наиболее частым значением. Вы можете использовать агрегирование для вычисления этого:

UPDATE DISTRICTS 
    SET ModeValue = (SELECT TOP (1) Address_Value
                     FROM Address A with (index(OBJECTID))
                     WHERE DISTRICTS.Shape.STIntersects(A.Shape) = 1 AND
                           Address.Address_Value is not null
                     GROUP BY Address_Value
                     ORDER BY COUNT(*) DESC
                    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...