[英]SPARQL query with COUNT and ORDER returns odd result
以下查询计算商店中的所有三元组
SELECT count(*) where { ?s ?p <http://dbpedia.org/resource/Cat> }
并返回预期的结果
但是,当我第一次尝试它时,我不小心留下了ORDER BY语句,例如,
select count(*) { ?s ?p <http://dbpedia.org/resource/Cat> } order by ?s
然后我得到一个很长的结果列表
任何人都可以解释为什么会出现这种结果及其含义? 它可能是Virtuoso SPARQL实现的错误吗?
如果你在不同的商店运行相同类型的查询,例如http://api.talis.com/stores/bbc-backstage/services/sparql (不运行virtuoso),它看起来就像一个bug
第一个查询有效......
SELECT (count(?s) as ?c)
WHERE {
?s ?p <http://purl.org/ontology/po/Version> .
}
第二个......
SELECT (count(?s) as ?c)
WHERE {
?s ?p <http://purl.org/ontology/po/Version> .
} order by ?s
...给出相同的结果。
实际上,计数+排序在这里没有多大意义,因为没有选择要检索?s
。 但正如你所说,你不小心尝试了......它确实看起来像一个bug。
我的建议是向virtuoso-user邮件列表发送一封电子邮件,以通知此问题。
我们(= OpenLink)在这里遇到麻烦。 这个ORDER BY?s正式是查询中的一个错误:没有分组的聚合意味着“在所有内容上聚合”,在查询的输出端不应该有聚合外的变量。 但是现在没有报告此错误:违反此规则的次数太多,以至于SQL编译器进行自动分组,并且如果可能,我们的SPARQL-to-SQL预处理器也会忽略此错误。
我们可能会保持当前的行为。 如果添加“严格”编译模式,则会在这种情况下触发错误报告。
这可能是Virtuoso的一个错误,它似乎将带有聚合的查询和ORDER BY
子句视为具有隐式GROUP BY
子句。 除了DBPedia之外,我在其他Virtuoso端点上注意到了这一点。
IMO这是一个错误,您应该将其报告给Virutoso用户邮件列表,如msalvadores所示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.