Wikidata查询如何筛选多值字段中长度最短的取值
解决方案
你可以通过子查询计算每个行政区域的最短缩写长度,再过滤结果实现需求,修改后的完整查询如下:
SELECT ?admin ?name ?abbr WHERE { # 子查询:计算每个行政区域的最短缩写长度 { SELECT ?admin (MIN(STRLEN(?tmpAbbr)) AS ?minAbbrLen) WHERE { VALUES ?admin { wd:Q771 } ?admin wdt:P1813 ?tmpAlias. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". ?tmpAlias rdfs:label ?tmpAbbr. } } GROUP BY ?admin } # 原有查询逻辑 VALUES ?admin { wd:Q771 } ?admin wdt:P131 ?country; wdt:P17 ?country. OPTIONAL { ?admin wdt:P1813 ?alias. } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". ?admin rdfs:label ?name. ?alias rdfs:label ?abbr. } # 过滤仅保留长度最短的缩写 FILTER(STRLEN(?abbr) = ?minAbbrLen) }
说明
- 新增的子查询会先批量计算所有指定行政区域对应的最短缩写长度,无需重复修改VALUES区域的配置
- 若存在多个长度相同的最短缩写,该查询会全部返回;如果需要强制只返回1条,可以在查询末尾添加
ORDER BY ?abbr LIMIT 1即可 - 如果不需要保留无缩写的行政区域记录,可删掉原逻辑里的
OPTIONAL关键字
内容的提问来源于stack exchange,提问作者theberzi
相关产品推荐
相关产品推荐

