我正在使用WikiData SPARQL端点搜索两个实体:博物馆(wd:Q33506
)和图书馆(wd:Q7075
),它们具有instagram和twitter帐户,以及它们来自哪个国家。我试图对它们进行计数并按国家/地区分组。
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
答案 0 :(得分:3)
主要错误是:
查询格式不正确:聚合错误
来自11.4 Aggregate Projection Restrictions:
在使用聚合的查询级别中,只能投影由聚合和常量组成的表达式,只有一个例外。当
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)
我还添加了UNION
,DISTINCT
,并在投影中将?country
替换为?item
。
请注意,同时拥有Instagram和Twitter帐户的图书馆和博物馆都将计算在内。