我如何在 SPARQL 中计算统计模式

How do I calculate statistical mode in SPARQL

我正在尝试使用 SPARQL 计算数据集的统计模式(出现频率最高的值)。

我可以像这样生成数据值及其频率的列表:

SELECT (COUNT(?o) AS ?no) ?o 
WHERE {?s ?p ?o  
FILTER isLiteral(?o)
} 
GROUP BY ?o ORDER by DESC(?no)

结果如下:

| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string>
| 19  | "true"^^<http://www.w3.org/2001/XMLSchema#string>
| 12  | "Offical"^^<http://www.w3.org/2001/XMLSchema#string> ...

但是,我只想要第一行数据,即数据集中最常见对象值的值和频率。

我试过像这样使用 MAX:

SELECT (MAX(?no) AS ?maxNo)
{
SELECT (COUNT(?o) AS ?no) ?o 
WHERE {?s ?p ?o  
FILTER isLiteral(?o)
} 
GROUP BY ?o ORDER by DESC(?no)
}

并且可以像这样取回计数:

---------
| maxNo |
=========
| 410   |
---------

但我想要返回的是最常出现的数据值的计数以及该数据值的样子:

| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string>

我试过在子查询中绑定 ?o 并将 ?o 添加到外部 SELECT 但两者都给我语法错误。

我还能尝试什么?

感谢阅读。

ORDER-LIMIT,也称为 "top n",应该能为您提供所需的答案。

SELECT (COUNT(?o) AS ?no) ?o 
WHERE { 
   ?s ?p ?o  
   FILTER isLiteral(?o)
} 
GROUP BY ?o 
ORDER by DESC(?no)
LIMIT 1