SPARQL - 在多行上连接值

SPARQL - Concat values on multiple rows

我想要一份萨尔瓦多所有货币及其细分的列表。

我使用这个查询:

SELECT ?currency ?currencyLabel ?currencyIso4217 ?subdivisionLabel  {
  ?currency wdt:P498 ?currencyIso4217 .
  ?currency wdt:P9059 ?subdivision .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
  {
    ?country wdt:P38 ?currency .
    BIND(wd:Q792 AS ?country).
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
  }  
}

在这里试试:Link

结果如下:

完美运行。但是第 2 行和第 3 行是相同的货币。该货币仅使用多个名称进行细分。我想让他们连接起来,所以我得到了这个输出:

这可能吗?

SPARQL 中的分组与 SQL 类似。 函数 GROUP BY 将具有相同值的结果组合成组。之后,将聚合函数应用于每个组的其他(不相同)值。

典型的聚合函数是 COUNTSUMMINMAXAVGGROUP_CONCATSAMPLE.

GROUP_CONCAT 很感兴趣。它执行跨组值的字符串连接。使用参数 separator 你甚至可以指定一个分隔符。字符串的顺序是任意的。

GROUP BYGROUP_CONCAT 的语法已在 UninformedUser 的评论中提供给您,但我在这里以稍微改编的形式重复:

SELECT ?currency ?currencyLabel ?currencyIso4217 (GROUP_CONCAT(?subdivisionLabel; separator = ", ") as ?subdivisionLabels) { 
  BIND(wd:Q792 AS ?country).
  ?country wdt:P38 ?currency .
  ?currency wdt:P498 ?currencyIso4217 .
  ?currency wdt:P9059 ?subdivision .
  ?subdivision rdfs:label ?subdivisionLabel .
  FILTER(lang(?subdivisionLabel) = 'en')
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
} GROUP BY ?currency ?currencyLabel ?currencyIso4217