SPARQL中的GROUP和COUNT

Tri*_*ker 2 grouping count sparql wikidata

我正在使用WikiData SPARQL端点搜索两个实体:具有instagram和twitter帐户以及它们来自哪个国家的博物馆(wd:Q33506)和图书馆(wd:Q7075)。我试图对它们进行计数并按国家/地区分组。

SELECT ?item ?instagram ?twitter ?countryLabel (COUNT(?country) AS ?ccount) WHERE {
  { ?item (wdt:P31/wdt:P279*) wd:Q33506. }
  { ?item (wdt:P31/wdt:P279*) wd:Q7075. }
  ?item wdt:P2003 ?instagram.
  ?item wdt:P2002 ?twitter.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  OPTIONAL { ?item wdt:P17 ?country. }
}
GROUP BY ?country
ORDER BY ?ccount
Run Code Online (Sandbox Code Playgroud)

Sta*_*lin 5

主要错误是:

查询格式错误:错误的汇总

11.4总投影限制

在使用聚合的查询级别中,只能投影由聚合和常量组成的表达式,只有一个例外。当GROUP BY给出仅由一个变量组成的一个或多个简单表达式时,这些变量可以从级别投影。

因此,您的查询应为:

SELECT ?countryLabel (COUNT(DISTINCT ?item) AS ?ccount) WHERE {
  { ?item wdt:P31/wdt:P279* wd:Q33506. }
  UNION
  { ?item wdt:P31/wdt:P279* wd:Q7075. }
  ?item wdt:P2003 ?instagram.
  ?item wdt:P2002 ?twitter.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  OPTIONAL { ?item wdt:P17 ?country. }
}
GROUP BY ?countryLabel ORDER BY DESC(?ccount)
Run Code Online (Sandbox Code Playgroud)

试试吧!

我还添加了UNIONDISTINCT并在投影中替换?country?item

请注意,同时拥有Instagram和Twitter帐户的图书馆和博物馆将计入在内。

  • @Trinker如果要处理URI列表,请使用“ VALUES”而不是多个“ UNION” (2认同)