希腊的夏天,第 2 卷

Summer in Greece, vol.2

按照这个问题:,因为执行这个查询时我的内存用完了,我想限制两个区域单元之间的查询,但我不能将它们分组:

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)

我错过了什么?

您可能再次对子选择感到困惑,这可能会导致内存使用效率低下。我看到了几种获得我相信你想要的结果的方法(有点不清楚)。第一种是使用 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 中重复三重模式,除非它们是析取计算的一部分。

您也可以在 ?regional_unit:

上使用 group by
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