我有一个table pline_sp
,其中包含一个包含SDO_GEOMETRY
个多边形的geom列。每个多边形都有一个类类型。我编写了一个SQL查询来查找类C1
,并查找位于类C2
内的类C1
中的所有多边形,然后将所有多边形求和。
我不确定这是最好的方法,但查询如下:
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;
表格中的C1
类大约有7个多边形,每个多边形都有不同的label
。
我希望得到它内部的多边形区域的总和,而不是所有的总和。
我希望结果如下:
Label Area
--------------
l324 321.54
l543 325.21
...
在SQL中是否有任何解决方案或我应该编写程序? 感谢。
答案 0 :(得分:0)
我找到了问题的答案。
首先,SQL可以更具可读性,如果在S.label
和select
中添加GROUP BY 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;