Sparql:如何按多列进行分组

16

在SPARQL中,我们可以通过以下语法按列对行进行分组:

GROUP BY ?colName

我们可以按照多个列进行分组,例如:

GROUP BY (?colName1 + ?colName2 + ?colName3) 

假设有一个查询:

Select ?a ?b ?c (MIN(?y) AS ?d)
Where {
....
}
GROUP BY (?a + ?b + ?c)

但是这个查询不起作用。

3个回答

9
您可以通过在它们之间用空格列出多个变量(而不是列)来使用GROUP BY
GROUP BY ?a ?b ?c

8
除了Ben Companjen的回答之外,
GROUP BY ?a ?b ?c

您需要修复SELECT语句,因为不能不明确指定非分组键而传递不确定的非分组键,例如:

SELECT (sample(?a) as ?A) (sample(?b) as ?B) (sample(?c) as ?C) (min(?y) as ?d)

我之前还没有了解过SAMPLE,但现在我了解了,我认为SELECT子句不需要修复。SAMPLE用于SELECT子句中未在GROUP BY子句中且未进行其他聚合的变量,但是?a ?b ?c恰好是GROUP BY子句中的变量。如果选择了一些额外的变量?e,但没有进行GROUP BY,那么就需要进行SAMPLE操作。 - Ben Companjen
SELECTGROUP BY 中的变量只需要按照完全相同的顺序放置,然后添加一个或多个变量来显示总和等内容。 - Hugolpz

-6
你尝试过这样的语句吗?
SELECT ?a+b+?c,(MIN(?y) AS ?d) Where { .... } GROUP BY (?a+?b+?c)
这在SQL Server中可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接