如何在GraphDB的SPARQL查询中按label分组并使用group_concat拼接otaupdater列值
解决SPARQL按分组拼接结果的问题
嘿,你遇到的问题很常见——GROUP_CONCAT本身是聚合函数,但如果不指定分组依据,它就会把所有行的结果合并成一个。要实现按label分组拼接对应的otaupdater,只需要在查询里加上GROUP BY子句就可以了。
修改后的完整查询语句
SELECT ?label (GROUP_CONCAT(?otaupdater; separator=", ") AS ?otaupdaters) WHERE { ?charger rdf:type mymodel:SoftwarePackage. ?charger mymodel:isCompatibleWith ?target. ?target car:CarId <93718293>. ?charger rdfs:label ?label. ?otaupdater rdf:type mymodel:OTAUpdater. ?charger mymodel:isCompatibleWith ?otaupdater. } GROUP BY ?label
为什么这样能行?
GROUP BY ?label告诉SPARQL:把所有具有相同?label值的行归为一组- 然后对每个组内的
?otaupdater执行GROUP_CONCAT,用指定的分隔符拼接起来
执行这个查询后,你就能得到期望的结果:
| label | otaupdaters |
|---|---|
| Chargie_One | 123, 456 |
| Chargie_Two | 123 |
额外小提示
如果同一个label下可能出现重复的otaupdater值,你可以在GROUP_CONCAT里加上DISTINCT来去重:
SELECT ?label (GROUP_CONCAT(DISTINCT ?otaupdater; separator=", ") AS ?otaupdaters) WHERE { # 这里是你的查询主体 } GROUP BY ?label
内容的提问来源于stack exchange,提问作者Larry
相关产品推荐
相关产品推荐

