如何对 SPARQL 中的计数项目进行分组,累积低命中条目?
how to group count items in SPARQL, accumulating low hit entries?
如何计算 SPARQL 中的分组条目,合并数量小于特定因子的条目?
以 Nobel Prize data 为例。我可以通过
这样的查询得到所有姓氏的数量
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name (count(*) as ?count) WHERE {
?id foaf:familyName ?name
}
GROUP BY $name
ORDER BY DESC($count)
如何修改查询,使其仅 returns 出现至少 3 次的姓氏,将其他姓名累积为 other。
只需将您的 SELECT
包裹到另一个中即可。
查询
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name_ (SUM(?count) AS ?count_) {
{
SELECT ?name (COUNT(*) AS ?count) {
?id foaf:familyName ?name
} GROUP BY ?name
}
BIND (IF(?count > 2, ?name, "Other") AS ?name_)
} GROUP BY ?name_ ORDER BY DESC(IF(?name_ = "Other", -1 , ?count_))
结果
name_ count_
----------- ---------
Smith 5
Fischer 4
Wilson 4
Lee 3
Lewis 3
Müller 3
Other 878
如何计算 SPARQL 中的分组条目,合并数量小于特定因子的条目?
以 Nobel Prize data 为例。我可以通过
这样的查询得到所有姓氏的数量PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name (count(*) as ?count) WHERE {
?id foaf:familyName ?name
}
GROUP BY $name
ORDER BY DESC($count)
如何修改查询,使其仅 returns 出现至少 3 次的姓氏,将其他姓名累积为 other。
只需将您的 SELECT
包裹到另一个中即可。
查询
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name_ (SUM(?count) AS ?count_) {
{
SELECT ?name (COUNT(*) AS ?count) {
?id foaf:familyName ?name
} GROUP BY ?name
}
BIND (IF(?count > 2, ?name, "Other") AS ?name_)
} GROUP BY ?name_ ORDER BY DESC(IF(?name_ = "Other", -1 , ?count_))
结果
name_ count_
----------- ---------
Smith 5
Fischer 4
Wilson 4
Lee 3
Lewis 3
Müller 3
Other 878