问题描述
假设我要寻找柏林的一些一级邻居。我问以下查询:
select ?s ?p where {
?s ?p dbr:Berlin.
}
是否可以对返回结果进行限制,使得每个?p
的唯一值最多有5个结果?
解决方法
我对子查询的尝试都超时了...
但是,可能有用的GROUP_CONCAT
,MAX
/ MIN
或SAMPLE
作为潜在的有用的解决方案,如果不是完全完美的解决方案?
SELECT
?writer (GROUP_CONCAT(?namestring; SEPARATOR = " ") AS ?namestrings)
(MIN(?namestring) AS ?min_name)
(MAX(?namestring) AS ?max_name)
(SAMPLE(?namestring) AS ?random_name)
(SAMPLE(?namestring) AS ?another_random_name_that_may_unfortunately_be_the_same_again)
WHERE {
?writer wdt:P31 wd:Q5;
wdt:P166 wd:Q37922;
wdt:P735 ?firstname.
?firstname wdt:P1705 ?namestring.
}
GROUP BY ?writer
HAVING ((COUNT(?writer)) > 2 )
LIMIT 20
here直播。
而且,如您所见,SAMPLE
显然只被评估一次,因此重复使用它不会使您接近五个(不同的)样本。
(您可以省略HAVING
供您使用。我仅将其包括在内以将其限制为有用的示例)