我尝试获得SPARQL结果,只有三重组合的最高变量。
好的,我们试着解释一下。
假设我们得到了类似的东西:
:resource1 pred:hasQuality :UltraQuality
:resource2 pred:hasQuality :MediumQuality
:resource2 pred:hasQuality :LowQuality
:resource3 pred:hasQuality :UltraQuality
:resource3 pred:hasQuality :LowQuality
:resource4 pred:hasQuality :LowQuality
现在,我希望以最高质量获得所有资源。质量可以通过ORDER BY或MAX订购。 (1→M-> U)。
我尝试了很多这样的事情:
SELECT ?res ?qual
WHERE {
?res pred:hasQuality ?qual.
}
ORDER BY ?res DESC(?qual)
但是现在,如果同一个?res有多个三元组,我想消除其他三元组。
预期结果应为:
:resource1 :UltraQuality
:resource2 :MediumQuality
:resource3 :UltraQuality
:resource4 :LowQuality
答案 0 :(得分:1)
您希望group by
项目,为您提供每个项目的一组质量。从该项目中,您希望获取最大值。假设你有这些数据:
@prefix : <http://stackoverflow.com/q/20562673/1281433/>
:a :quality 3 .
:a :quality 4 .
:a :quality 5 .
:b :quality 9 .
:c :quality 2 .
:c :quality 1 .
然后你可以使用这样的查询:
prefix : <http://stackoverflow.com/q/20562673/1281433/>
select ?item (max(?quality) as ?maxQuality)
where {
?item :quality ?quality .
}
group by ?item
你会得到这些结果:
---------------------
| item | maxQuality |
=====================
| :b | 9 |
| :c | 2 |
| :a | 5 |
---------------------