【问题标题】:SPARQL query and distinct countSPARQL 查询和不同计数
【发布时间】:2009-08-03 17:08:34
【问题描述】:

我有以下疑问:

SELECT ?tag WHERE {
  ?r ns9:taggedWithTag ?tagresource.
  ?tagresource ns9:name ?tag
}
LIMIT 5000

结果是:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

我想得到类似的东西:

tag | count
-----------------
abc     7
abd     1
ads     1
anb     1

我已经用count(*)count(?tag) 进行了尝试,但是我收到了错误消息"Variable or "*" expected." 有人可以告诉我,如何使它正确吗?

【问题讨论】:

  • Core SPARQL 没有像 COUNT 这样的聚合。您正在使用哪个 SPARQL 扩展?
  • 我想,我正在使用核心 :(
  • @laalto 请注意,从 2013 年开始,最新版本的 SPARQL 1.1 版确实包含聚合。

标签: count sparql


【解决方案1】:

如果您使用 Java 和 Jena 的 ARQ,则可以使用 ARQ's extensions for aggregates。您的查询类似于:

SELECT ?tag (count(distinct ?tag) as ?count)
WHERE {
    ?r ns9:taggedWithTag ?tagresource.
    ?tagresource ns9:name ?tag
}
LIMIT 5000

original SPARQL specification from 2008 不包含聚合,但 the current version, 1.1, from 2013 包含。

【讨论】:

  • 它没有,但聚合被添加到 SPARQL 1.1 并且它们被广泛实施(通过不同的扩展,如前所述)
【解决方案2】:

将 COUNT()、MIN()、MAX()、SUM()、AVG() 与 GROUP BY 一起使用可以生成三元组的汇总值。请注意,这些模式可能特定于 SPARQL 1.1。

例如,这个可以对每个 ?category 的 ?value 求和,

SELECT ?category (SUM(?value) as ?valueSum)
WHERE
{
  ?s ?category ?value .
}
GROUP BY ?category

这个可以统计谓词?p的使用次数,

SELECT ?p (COUNT(?p) as ?pCount)
WHERE
{
  ?s ?p ?o .
}
GROUP BY ?p

这些示例的灵感来自 Bob DuCharme (2011),“Learning SPARQL”中的材料。 O'Reilly Media,塞瓦斯托波尔,CA,美国;见http://www.learningsparql.com/

为避免使用 GROUP BY 时出现“Bad aggregate”错误

  1. 分组变量应该匹配; (第一个例子中的?category)
  2. SELECT 中的其余变量应各自产生一个值; (SUM(?value) as ?valueSum) 在第一个例子中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多