优化 – 使用SPARQL在给定范围(间隔)中聚合值?
发布时间:2020-12-14 04:48:34 所属栏目:百科 来源:网络整理
导读:比如在RDF数据集中,有一组值,范围从0到100(例如,百分比).我想计算给定范围内的值的数量,例如,100 – 90 | 90 – 80 | …… | 10 – 0.我期望的输出如下所示: ╔════════════════╦════════╗║ Range ║ Count ║╠═══════
比如在RDF数据集中,有一组值,范围从0到100(例如,百分比).我想计算给定范围内的值的数量,例如,100 – 90 | 90 – 80 | …… | 10 – 0.我期望的输出如下所示:
╔════════════════╦════════╗ ║ Range ║ Count ║ ╠════════════════╬════════╣ ║ 100 >= x < 90 ║ 4521 ║ ║ 90 >= x < 80 ║ 650 ║ ║ ... ║ ... ║ ║ 10 >= x <= 0 ║ 2650 ║ ╚════════════════╩════════╝ 我目前正在使用SPARQL子查询和过滤器来获得解决方案.但这似乎是一个常见的用例,我的直觉告诉我应该有更好的方法来做到这一点.是否有更好(或更有效)的方法来达到这个答案? 目前的解决方案如下所示. PREFIX dqv: <http://www.w3.org/ns/dqv#> select distinct ?count90_100 ?count80_90 ?count10_0 where { ?m a dqv:QualityMeasurement . { select count(?m) as ?count90_100 where { ?m dqv:value ?value FILTER (?value > 90 && ?value <= 100) }} { select count(?m) as ?count80_90 where { ?m dqv:value ?value FILTER (?value > 80 && ?value <= 90) }} { select count(?m) as ?count10_0 where { ?m dqv:value ?value FILTER (?value >= 0 && ?value <= 10) }} } 解决方法
您可以使用值块指定范围的上限和下限,并为每个范围“id”获取“id”.然后你可以分组该范围.例如.,
select ?rangeId (count(?x) as ?numMatches) { values (?rangeId ?min ?max) { (0 0 10) (1 10 20) #-- ... (8 80 90) (9 90 100) } #-- query that finds a value for ?x... filter (?min <= ?x && ?x < ?max) } group by ?rangeId (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容