2012-03-27 31 views
7

Với một nghệ sĩ âm nhạc, tôi đang cố gắng tìm các nghệ sĩ âm nhạc khác có "hành động liên kết" phổ biến nhất với một nghệ sĩ cụ thể. Tôi có truy vấn sau cho Eminem và nó hoạt động tốtDBpedia SPARQL - liên kết hình ảnh và tài nguyên của các nghệ sĩ khác?

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 

Nhưng tôi muốn lấy lại hình ảnh của các nghệ sĩ cũng như liên kết tài nguyên dbpedia của họ (? C) thêm. Đang thử điều này

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 

cho tôi lỗi "Biến? I được sử dụng trong tập hợp kết quả ngoài tổng hợp và không được đề cập trong mệnh đề GROUP BY". Nếu tôi groupby bởi tôi nó hoạt động tốt nhưng tôi không thể nhận được? C trở lại.

Vậy làm cách nào để tôi có được hình ảnh và tài nguyên liên kết các nghệ sĩ phù hợp khác?

Trả lời

6

Sử dụng phụ truy vấn:

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 } 

bạn có thể tìm thấy kết quả here.

1

Giống như trong SQL, bạn có thể sử dụng GROUP BY với nhiều biến.

Điều này dường như làm việc:

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 

Xem kết quả here.

Các vấn đề liên quan