我正在尝试从维基数据中恢复电影的演员名单。我对Dr. No的sparql查询如下:
SELECT ?actor ?actorLabel WHERE {
?movie wdt:P161 ?actor .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
FILTER(?movie = wd:Q102754)
}
LIMIT 1000我可以在query.wikidata.org上试用,但结果不是我想要的顺序。有“肖恩·康纳利”、“泽娜·马歇尔”、“乌苏拉·安德丝”。
正如您在https://www.wikidata.org/wiki/Q102754中看到的那样,数据库按要求的顺序包含了演员列表(Sean Connery,Ursula Andress,Joseph Wiseman)。通常,演员列表是按计费顺序给出的,这是我想要恢复的。
发布于 2017-02-22 20:19:33
SPARQL通过使用ORDER BY对结果进行排序,请参阅here
示例中的排序基于语句的引用次数。下面是一个未优化的版本,它可以实现您想要的功能:
SELECT ?actor ?actorLabel WHERE {
?movie p:P161 ?statement .
?statement ps:P161 ?actor .
OPTIONAL {?statement prov:wasDerivedFrom ?ref . }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
FILTER(?movie = wd:Q102754)
}
group by ?movie ?actor ?actorLabel
ORDER BY DESC(count(?ref)) ASC(?actorLabel)
LIMIT 1000https://stackoverflow.com/questions/42387768
复制相似问题