如何通过查询获得 sparql 组中的总计
How to get grand total in a sparql group by query
我跟进 query,其中 schema.org 数据库用于查找 class 的 children 的数量。每个 class 的答案给出了 children 的数量。在我的应用程序中,我需要所有 children 的总计(即每个组的计数总和),以便为每个组计算 children 总数的百分比。
我从上一个问题得到的查询是:
prefix schema: <http://schema.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?child (count(?grandchild) as ?nGrandchildren)
from <http://localhost:3030/testDB/data/schemaOrg>
where {
?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
} group by ?child
给出了预期的答案(children 的事件和数量)。
如何得到总数?
我尝试了一个嵌套查询:
prefix schema: <http://schema.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?child (count(?grandchild) as ?nGrandchildren)
from <http://localhost:3030/testDB/data/schemaOrg>
where {
select (count(?grandchild) as ?grandTotal)
{?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
}
} group by ?child
但得到一个答案:“”-> 0。
此查询使用两个 sub-SELECTs:
* 第一个计算每个 child 的 grandchildren 数
* 第二个returns总人数grandchildren
prefix schema: <http://schema.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?child ?nGrandchildren
(round(?nGrandchildren/?totalGrandchildren * 100) as ?percentageGrandchildren) {
# compute number per child
{
select ?child (count(?grandchild) as ?nGrandchildren) where {
?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
}
group by ?child
}
# compute total number
{
select (count(?grandchild) as ?totalGrandchildren) where {
?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
}
}
}
输出
-----------------------------------------------------------------------------------------------
| child | nGrandchildren | percentageGrandchildren |
===============================================================================================
| schema:UserInteraction | 9 | "82"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:FoodEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:MusicEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:PublicationEvent | 2 | "18"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:LiteraryEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:SportsEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:DanceEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ScreeningEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:DeliveryEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ExhibitionEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:EducationEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:SaleEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:VisualArtsEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:CourseInstance | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ChildrensEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:BusinessEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:Festival | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ComedyEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:TheaterEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:SocialEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
-----------------------------------------------------------------------------------------------
我跟进 query,其中 schema.org 数据库用于查找 class 的 children 的数量。每个 class 的答案给出了 children 的数量。在我的应用程序中,我需要所有 children 的总计(即每个组的计数总和),以便为每个组计算 children 总数的百分比。 我从上一个问题得到的查询是:
prefix schema: <http://schema.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?child (count(?grandchild) as ?nGrandchildren)
from <http://localhost:3030/testDB/data/schemaOrg>
where {
?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
} group by ?child
给出了预期的答案(children 的事件和数量)。 如何得到总数? 我尝试了一个嵌套查询:
prefix schema: <http://schema.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?child (count(?grandchild) as ?nGrandchildren)
from <http://localhost:3030/testDB/data/schemaOrg>
where {
select (count(?grandchild) as ?grandTotal)
{?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
}
} group by ?child
但得到一个答案:“”-> 0。
此查询使用两个 sub-SELECTs: * 第一个计算每个 child 的 grandchildren 数 * 第二个returns总人数grandchildren
prefix schema: <http://schema.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?child ?nGrandchildren
(round(?nGrandchildren/?totalGrandchildren * 100) as ?percentageGrandchildren) {
# compute number per child
{
select ?child (count(?grandchild) as ?nGrandchildren) where {
?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
}
group by ?child
}
# compute total number
{
select (count(?grandchild) as ?totalGrandchildren) where {
?child rdfs:subClassOf schema:Event .
optional {
?grandchild rdfs:subClassOf ?child
}
}
}
}
输出
-----------------------------------------------------------------------------------------------
| child | nGrandchildren | percentageGrandchildren |
===============================================================================================
| schema:UserInteraction | 9 | "82"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:FoodEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:MusicEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:PublicationEvent | 2 | "18"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:LiteraryEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:SportsEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:DanceEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ScreeningEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:DeliveryEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ExhibitionEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:EducationEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:SaleEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:VisualArtsEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:CourseInstance | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ChildrensEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:BusinessEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:Festival | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:ComedyEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:TheaterEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
| schema:SocialEvent | 0 | "0"^^<http://www.w3.org/2001/XMLSchema#decimal> |
-----------------------------------------------------------------------------------------------