微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SPARQL - 多行上的连接值

如何解决SPARQL - 多行上的连接值

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

我使用这个查询

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

结果如下:

enter image description here

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

enter image description here

这可能吗?

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?