我想使用 SPARQL 检索人口超过 10 万的意大利城市列表,我使用以下查询:
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?city ?name ?pop WHERE {
?city a dbo:Settlement .
?city foaf:name ?name .
?city dbo:populationTotal ?pop .
?city dbo:country ?country .
?city dbo:country dbpedia:Italy .
FILTER (?pop > 100000)
}
在结果中,我得到例如两条不同的行(代表相同的实体,但名称不同):
http://dbpedia.org/resource/博洛尼亚 http://dbpedia.org/resource/Bologna"博洛尼亚"@zh 384038
http://dbpedia.org/resource/博洛尼亚 http://dbpedia.org/resource/Bologna"博洛尼亚市"@en 384038
我该如何使用SELECT DISTINCT
仅在列中?city
但仍然有其他列作为输出?
您可以使用GROUP BY
按特定列进行分组,然后使用SAMPLE()
聚合以从其他列中选择一个值,例如
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?city (SAMPLE(?name) AS ?cityName) (SAMPLE(?pop) AS ?cityPop)
WHERE
{
?city a dbo:Settlement .
?city foaf:name ?name .
?city dbo:populationTotal ?pop .
?city dbo:country ?country .
?city dbo:country dbpedia:Italy .
FILTER (?pop > 100000)
}
GROUP BY ?city
所以通过分组?city
每个城市只能获得一行,因为您已按以下方式分组?city
您不能直接选择不是组变量的变量。
您必须改为使用SAMPLE()
聚合以选择您希望在最终结果中包含的每个非组变量的值之一。这将选择以下值之一?name
and ?pop
返回为?cityName
and ?cityPop
分别
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)