8

给定一位音乐艺术家,我试图找到与特定艺术家有最常见“关联行为”的其他音乐艺术家。我对 Eminem 有以下查询,它工作正常

SELECT ?c (COUNT(*) AS ?count) WHERE {
{
?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>.
?b <http://dbpedia.org/property/associatedActs> ?
}
}group by ?c order by desc(?count) LIMIT 10

但我想找回艺术家的照片以及他们添加的 dbpedia 资源链接 (?c)。试试这个

SELECT ?c (COUNT(*) AS ?count) WHERE {
{
?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>.
?b <http://dbpedia.org/property/associatedActs> ?c.
?c <http://dbpedia.org/ontology/thumbnail> ?i
}
}group by ?c order by desc(?count) LIMIT 10

给我一个错误“变量 ?i 用于聚合外部的结果集中,并且未在 GROUP BY 子句中提及”。如果我 groupby by i 它工作正常,但我无法得到 ?c 回来。

那么如何获取其他匹配艺术家的图片和资源链接呢?

4

2 回答 2

6

使用子查询:

SELECT ?c ?i ?count WHERE { {SELECT ?c (COUNT(*) AS ?count) WHERE {
{
?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>.
?b <http://dbpedia.org/property/associatedActs> ?c .

}
} group by ?c order by desc(?count) LIMIT 10} . ?c <http://dbpedia.org/ontology/thumbnail> ?i }

你可以在这里找到结果。

于 2012-03-27T19:01:30.827 回答
1

就像在 SQL 中一样,您可以将 GROUP BY 与多个变量一起使用。

这似乎有效:

SELECT ?c (COUNT(*) AS ?count) ?i WHERE {

?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>.
?b <http://dbpedia.org/property/associatedActs> ?c.
?c <http://dbpedia.org/ontology/thumbnail> ?i

} GROUP BY ?c ?i ORDER BY desc(?count) LIMIT 10

在这里查看结果。

于 2013-01-09T23:49:14.607 回答