drs*_*ein 10 rdf sparql dbpedia linked-data
我想用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)
}
Run Code Online (Sandbox Code Playgroud)
在结果中,我得到两个不同的行(代表相同的实体,但名称不同):
http://dbpedia.org/resource/Bologna "博洛尼亚"@ 384038
http://dbpedia.org/resource/Bologna"Comune di Bologna"@ 384038
如何SELECT DISTINCT
仅在列中使用?city
但仍然具有外部列的输出?
Rob*_*obV 16
您可以使用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
Run Code Online (Sandbox Code Playgroud)
因此,通过分组,?city
每个城市只能获得一行,因为按照您的分组,?city
不能直接选择非组变量的变量.
您必须使用SAMPLE()
聚合来为您希望在最终结果中获得的每个非组变量选择一个值.这将选择的值中的一个?name
,并?pop
为返回?cityName
和?cityPop
分别
归档时间: |
|
查看次数: |
4831 次 |
最近记录: |