2016-04-10 8 views
1

После этого qeustion: Summer in Greece with SPARQL, так как моя память заканчивается при выполнении этого запроса, я хотел бы, чтобы ограничить запрос между двумя региональными единицами, но я не могу сгруппировать их:Лето в Греции, 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) 

Что мне не хватает?

+0

С точки зрения запуска из памяти, насколько велика ваша хранилище данных и сколько памяти у вас есть? – scotthenninger

+0

@scotthenninger большой и маленький, ожидается. – gsamaras

ответ

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 на 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 
+0

Отлично, первый работает. Хотел бы я сказать то же самое для 2-го; это дает мне эту ошибку: «Лексическая ошибка в строке 11, столбец 9. Обнаружена:« »(32), после:« VALUES »' – gsamaras

+0

Все выглядит хорошо для версии GROUP BY. Какой двигатель SPARQL вы используете? – scotthenninger

+0

Скотт, я использую Страбон, и я не уверен, как ответить на ваш вопрос. strabon.di.uoa.gr, но не беспокойтесь, я это выясню! ;) – gsamaras

 Смежные вопросы

  • Нет связанных вопросов^_^