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
将具有相同值的结果组合成组。之后,将聚合函数应用于每个组的其他(不相同)值。
典型的聚合函数是 COUNT
、SUM
、MIN
、MAX
、AVG
、GROUP_CONCAT
和 SAMPLE
.
您 GROUP_CONCAT
很感兴趣。它执行跨组值的字符串连接。使用参数 separator
你甚至可以指定一个分隔符。字符串的顺序是任意的。
GROUP BY
和 GROUP_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
我想要一份萨尔瓦多所有货币及其细分的列表。
我使用这个查询:
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
将具有相同值的结果组合成组。之后,将聚合函数应用于每个组的其他(不相同)值。
典型的聚合函数是 COUNT
、SUM
、MIN
、MAX
、AVG
、GROUP_CONCAT
和 SAMPLE
.
您 GROUP_CONCAT
很感兴趣。它执行跨组值的字符串连接。使用参数 separator
你甚至可以指定一个分隔符。字符串的顺序是任意的。
GROUP BY
和 GROUP_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