You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SPARQL查询各属性对应实例的不同取值平均数的实现方法

SPARQL 统计属性对应实例不同值平均数量方案

核心逻辑

统计逻辑分两步执行:

  • 第一步:按「实例+属性」分组,统计每个实例在对应属性下的不同值计数
  • 第二步:按「属性」分组,对所有实例的计数值求平均

通用查询模板

适用于任意类下所有属性的统计需求,替换模板中的类URI即可使用:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?property (AVG(?valueCount) AS ?avgDistinctValues)
WHERE {
  ?instance a <TARGET_CLASS_URI> .
  ?instance ?property ?value .
  {
    SELECT ?instance ?property (COUNT(DISTINCT ?value) AS ?valueCount)
    WHERE {
      ?instance a <TARGET_CLASS_URI> .
      ?instance ?property ?value .
    } GROUP BY ?instance ?property
  }
} GROUP BY ?property

一级方程式车手场景示例

以DBpedia数据集为例,统计F1车手所有属性的平均不同值数量,查询语句如下:

PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?property (AVG(?valueCount) AS ?avgDistinctValues)
WHERE {
  ?driver a dbo:FormulaOneRacer .
  ?driver ?property ?value .
  {
    SELECT ?driver ?property (COUNT(DISTINCT ?value) AS ?valueCount)
    WHERE {
      ?driver a dbo:FormulaOneRacer .
      ?driver ?property ?value .
    } GROUP BY ?driver ?property
  }
} GROUP BY ?property
# 可选排序规则:ORDER BY DESC(?avgDistinctValues)

如果仅需要统计职业、参赛车队两个特定属性,可以添加属性过滤规则提升查询效率:

PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?property (AVG(?valueCount) AS ?avgDistinctValues)
WHERE {
  VALUES ?property { dbo:occupation dbo:team }
  ?driver a dbo:FormulaOneRacer .
  ?driver ?property ?value .
  {
    SELECT ?driver ?property (COUNT(DISTINCT ?value) AS ?valueCount)
    WHERE {
      VALUES ?property { dbo:occupation dbo:team }
      ?driver a dbo:FormulaOneRacer .
      ?driver ?property ?value .
    } GROUP BY ?driver ?property
  }
} GROUP BY ?property

注意事项

  • 统计时自动排除没有对应属性值的实例,不会将0值计入平均值计算
  • 大数据集查询时建议优先限定属性范围,避免全量扫描导致查询超时
  • 不同RDF数据集的类和属性URI可能存在差异,需要根据你使用的数据集调整对应URI

内容的提问来源于stack exchange,提问作者Rydzio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:54:05