8

与えられた音楽アーティストについて、特定のアーティストと最も一般的な "associatedActs of" を持つ他の音楽アーティストを見つけようとしています。エミネムに対して次のクエリがあり、正常に動作します

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 句では言及されていません」というエラーが表示されます。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 に答える