我有一个table pline_sp
,它有一个包含SDO_GEOMETRY
多边形的geom列。每个多边形都有一个类类型。我编写了一个SQL查询来查找类C1
,并查找位于类C1
内部的类C2
中的所有多边形,然后求和所有多边形的面积。
我不确定这是最好的方式,但查询如下:
select sum(SDO_GEOM.SDO_AREA(result.geom, 0.005, 'unit=SQ_KM'))
from (SELECT a.geom
FROM pline_sp a,
(select A.Geom from pline_sp A where A.class='C1') B
WHERE SDO_RELATE(A.Geom, B.Geom, 'mask=inside') = 'TRUE'
AND A.Class='C2') result;
表中大约有7个来自类C1
的多边形,每个多边形都有不同的label
。
我想得到里面的多边形区域的和,用标签分开,而不是所有的和。
我希望结果是这样的:
Label Area
--------------
l324 321.54
l543 325.21
它在SQL中有任何解决方案吗?或者我应该编写过程?谢谢
我找到了问题的答案。首先,SQL可以更可读,如下所示,通过在select
和GROUP BY S.label
中添加S.label
,一切都会好起来:
SELECT S.label,SUM(SDO_GEOM.SDO_AREA(M.geom,0.005,'unit=SQ_KM'))
from
(SELECT P.label,P.geom from pline_sp P WHERE P.class='class1') S,
(SELECT P.geom from pline_sp P WHERE P.class='class2') M
WHERE
SDO_RELATE(M.geom,S.geom,'mask=inside')='TRUE'
GROUP BY S.label;