计算落在每个多边形内的点的模式

时间:2019-06-22 06:25:08

标签: sql sql-server

  • 我在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 个答案:

答案 0 :(得分:1)

模式是最频繁的值。您可以使用聚合来计算:

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
                    );
相关问题