夏天在希腊,第2卷

时间:2016-04-10 13:42:20

标签: group-by sparql rdf geospatial linked-data

在这个qeustion:Summer in Greece with SPARQL之后,由于我的内存在执行此查询时耗尽,我想限制两个区域单位之间的查询,但我无法对它们进行分组:

SELECT * #?municipality (?bwCount1+?bwCount2 as ?bwCount)
WHERE { 
{
    SELECT (COUNT(?bw) as ?bwCount1) WHERE 
    {
           ?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" .
           ?municipality1 geo:ανήκει_σε ?regional_unit .
           ?municipality1 geo:έχει_γεωμετρία ?geometry .

           ?bw geos:hasGeometry ?bw_geo .
           ?bw_geo geos:asWKT ?bw_geo_wkt .
           FILTER(strdf:within(?geometry, ?bw_geo_wkt)) .
           ?bw unt:has_concie_0 ?concie_0 .
           FILTER(?concie_0 > 40)
    }
}
UNION
{
    SELECT (COUNT(?bw) as ?bwCount2) WHERE 
    {
           ?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΛΕΣΒΟΥ" .
           ?municipality2 geo:ανήκει_σε ?regional_unit .
           ?municipality2 geo:έχει_γεωμετρία ?geometry .

           ?bw geos:hasGeometry ?bw_geo .
           ?bw_geo geos:asWKT ?bw_geo_wkt .
           FILTER(strdf:within(?geometry, ?bw_geo_wkt)) .
           ?bw unt:has_concie_0 ?concie_0 .
           FILTER(?concie_0 > 40)
    }
}
}
#GROUP BY ?municipality
#ORDER BY DESC(?bwCount)

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您可能会再次将自己与子选择混淆,这可能会导致内存使用效率低下。我看到了几种获得我认为你想要的结果的方法(有点不清楚)。第一种是使用UNION

SELECT (COUNT(?bw1) as ?bwCount1) (COUNT(?bw2) as ?bwCount2)
WHERE { 
   ?municipality1 geo:ανήκει_σε ?regional_unit .
   ?municipality1 geo:έχει_γεωμετρία ?geometry .
   {
     ?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" .
     ?bw2 geos:hasGeometry ?bw_geo .
   }
   UNION
   {
     ?regional_unit geo:έχει_επίσημο_όνομα "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΛΕΣΒΟΥ" .
     ?bw1 geos:hasGeometry ?bw_geo .
   }
   ?bw_geo geos:asWKT ?bw_geo_wkt .
   FILTER(strdf:within(?geometry, ?bw_geo_wkt)) .
   ?bw unt:has_concie_0 ?concie_0 .
   FILTER(?concie_0 > 40)
}

这里的最佳做法是不在UNION内重复三重模式,除非它们是析取计算的一部分。

您也可以使用group by on?regional_unit:

执行此操作
SELECT (COUNT(?bw) as ?bwCount1)
WHERE { 
  VALUES ?name {"ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΗΡΑΚΛΕΙΟΥ" "ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΝΟΤΗΤΑ ΛΕΣΒΟΥ"}
  ?municipality1 geo:ανήκει_σε ?regional_unit .
  ?municipality1 geo:έχει_γεωμετρία ?geometry .
  ?regional_unit geo:έχει_επίσημο_όνομα ?name .
  ?bw geos:hasGeometry ?bw_geo .
  ?bw_geo geos:asWKT ?bw_geo_wkt .
  FILTER(strdf:within(?geometry, ?bw_geo_wkt)) .
  ?bw unt:has_concie_0 ?concie_0 .
  FILTER(?concie_0 > 40)
} GROUP BY ?regional_unit