gpt4 book ai didi

java - 在 SPARQL 中组合多组行

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:31 25 4
gpt4 key购买 nike

由于我的英语不好,我无法正式描述我的问题;让我用一个例子来告诉它。下表实际上是按'subject','predicate'分组的。

我们在行上定义一个集合,如果它们是相同的“主题”。现在我想合并包含相同“谓词”的任意两个集合,对同一“谓词”的“计数”求和,并计算具有相同集合的不同主题的数量。

subject    predicate    count
-----------------------------
s1 p1 1
s1 p2 2
s2 p1 3
s3 p1 2
s3 p2 2

因此,这张表想要的是两组:

{2, (p1, 3), (p2, 4)}, 
{1, (p1,3)}

在第一个集合中,2 表示有两个对象(s1 和 s3)有这个集合;(p1,3) 是 (s1, p1, 1) 和 (s3, p1, 2) 的总和。

那么我如何检索这些集合并将它们存储在 Java 中?

  • 我如何使用 SPARQL 完成此操作?

  • 或者,先将这些三元组存储在 Java 中,然后如何使用 Java 获取这些集合?


一个解决方案可能是连接谓词和计数,

SELECT (COUNT(?s) AS ?distinct)
?propset
(group_concat(?count; separator = \"\\t\") AS ?counts)
{
SELECT ?s
(group_concat(?p; separator = \" \") AS ?propset)
(group_concat(?c; separator = \" \") AS ?count
{
?s ?p ?c
} GROUP BY ?s ORDER BY ?s
} GROUP BY ?propset ORDER BY ?propset

然后计数可以解耦,然后求和。它在小型数据集上运行良好,但非常耗时。

我想我会放弃这个奇怪的问题。非常感谢您的回答。

最佳答案

让我们开始吧

select ?predicate (sum(?count) as ?totalcount) 
{
?subject ?predicate ?count
}
group by ?predicate

这是最基本的部分,但分组不正确(现已澄清)。

分组变量应该是这样的(希望这是正确的语法):

select ?subject (group_concat(distinct ?p ; separator = ",") AS ?propset)
{
?subject ?p ?c
}
group by ?subject

我希望给出:

subject    propset
------------------
s1 "p1,p2"
s2 "p1"
s3 "p1,p2"

所以最终的查询应该是:

select ?predicate (sum(?count) as ?totalcount) 
{
?subject ?predicate ?count .
{
select ?subject (group_concat(distinct ?p ; separator = ",") AS ?propset)
{
?subject ?p ?c
}
group by ?subject
}
}
group by ?propset ?predicate

这样行吗?

关于java - 在 SPARQL 中组合多组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11026790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com