gpt4 book ai didi

group-by - SPARQL 仅按一个变量分组

转载 作者:行者123 更新时间:2023-12-04 03:08:20 24 4
gpt4 key购买 nike

我正在尝试列出世界上每个国家/地区最大的湖泊以进行学校练习。我正在使用 this dbpedia endpoint .这是我所拥有的:

select ?country (MAX(?area) AS ?maxarea)
where {
?lake rdfs:label ?label .
?lake rdf:type dbo:Lake .
?lake dbo:areaTotal ?area .
?lake dbo:country ?country .
FILTER (lang(?label) = 'en') .
}
group by ?country

我得到了国家及其最大湖泊的面积,这是理想的结果,但没有湖泊的名称。我只想在表中列出湖的名称。因此,当我将 ?label 添加到选择中时,它会提示

Variable ?label is used in the result set outside aggregate and not mentioned in GROUP BY clause



如果我将 ?label 添加到 GROUP BY,那么它与 ?country 和 ?label 一起分组,它试图获得最大值。这导致列出所有可能的湖泊(当它按国家和湖泊分组时,每个组都有一个元素,因为国家湖泊组合总是唯一的),这不是我想要的。

我试图通过使用不同类型的连接和子查询来解决这个问题,但无济于事。 SAMPLE 也不起作用,因为它只是从该国随机选取一个湖泊,而不是最大的湖泊。 为了清楚起见,我不是在寻求答案,而是在问是否有可能列出变量而不添加到 GROUP BY 的方法。

最佳答案

这个答案并没有真正回答我最初的问题,即我是否可以选择一个变量而不在 GROUP BY 中使用它。据我所知,我可以用子查询列出它,但我不能只拥有一个变量而不在 GROUP BY 中使用它。

我使用这样的子查询解决了练习题:

select ?country ?area ?lake
where {
?lake rdfs:label ?label .
?lake rdf:type dbo:Lake .
?lake dbo:areaTotal ?area .
?lake dbo:country ?country .
?country rdf:type dbo:Country .
FILTER (lang(?label) = 'en') .
FILTER(?maxarea = ?area)
{
select ?country (MAX(?area) AS ?maxarea)
where {
?lake rdfs:label ?label .
?lake rdf:type dbo:Lake .
?lake dbo:areaTotal ?area .
?lake dbo:country ?country .
?country rdf:type dbo:Country .
FILTER (lang(?label) = 'en') .
}
group by ?country
}
}

我添加了一个 ?country rdf:type dbo:country 检查以删除一些地区,如“纽瓦克盆地”。

关于group-by - SPARQL 仅按一个变量分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47086244/

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