gpt4 book ai didi

rdf - 使用 SPARQL 仅对一个值进行 DISTINCT

转载 作者:行者123 更新时间:2023-12-01 19:59:47 25 4
gpt4 key购买 nike

我想使用 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/Bologna "Bologna"@en 384038

http://dbpedia.org/resource/Bologna "Comune di Bologna"@en 384038

如何仅在 ?city 列中使用 SELECT DISTINCT 但仍将外部列作为输出?

最佳答案

您可以使用 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 进行分组,因此您无法直接选择“t 组变量。

您必须使用 SAMPLE() 聚合来为您希望在最终结果中包含的每个非组变量选择一个值。这将选择 ?name?pop 的值之一分别返回为 ?cityName?cityPop

关于rdf - 使用 SPARQL 仅对一个值进行 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com