[英]How can I write a query which returns the maximum value in SPARQL?
我想在SPARQL中进行查询,以查找各州和拥有最多本科生的每个州的大学。
我尝试了这个:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpr: <http://dbpedia.org/resource/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?University ?State (MAX(?nu) AS ?size)
WHERE{
?University dbpo:numberOfUndergraduateStudents ?nu.
?University a dbpo:University.
?University dbpo:state ?State.
{
SELECT ?State
WHERE{
?State a dbpo:PopulatedPlace.
?State a dbpo:AdministrativeRegion.
?State dbpo:country dbpedia:United_States.
?State dbpo:capital ?Capital.
FILTER(bound(?Capital))
}
}
}
但是,它不返回我的预期输出。 它从一个州返回一所以上的学校。 有人可以指导我吗?
您不需要内部SELECT(可以将其放置在外部块中)。
FILTER(bound(?Capital))
-?资本必须受到约束。
那你需要
GROUP BY ?State
将其放入内部SELECT中,然后使用外部SELECT查找具有该大小,状态的实际大学(-ies)。
您的查询目前在技术上是非法的:
SELECT ?University ?State (MAX(?nu) AS ?size)
没有GROUP BY是错误的。 您只能选择GROUP BY变量和集合
正如AndyS所说:在这里做事的顺序是
第一步进入子查询,第二步进入外部查询。 然后你得到这个:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpr: <http://dbpedia.org/resource/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?University ?State ?size
WHERE{
?University dbpo:numberOfUndergraduateStudents ?size.
?University a dbpo:University.
?University dbpo:state ?State.
{
SELECT ?State (MAX(?nu) as ?size)
WHERE{
?State a dbpo:PopulatedPlace.
?State a dbpo:AdministrativeRegion.
?State dbpo:country dbpedia:United_States.
?State dbpo:capital ?Capital.
?University dbpo:numberOfUndergraduateStudents ?nu.
?University a dbpo:University.
?University dbpo:state ?State.
FILTER(bound(?Capital))
}
GROUP BY ?State
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.