【问题标题】:Sparql query using ASK WHERE based on COUNT result基于 COUNT 结果使用 ASK WHERE 的 Sparql 查询
【发布时间】:2013-11-07 01:49:08
【问题描述】:

我有以下基本查询,它检索一位艺术家完成了多少幅画

PREFIX dc: <http://purl.org/dc/terms/>  
SELECT (COUNT(?numberOfPaintings) AS ?howMany)  
WHERE  {  ?numberOfPaintings dc:creator "Artists_Name" . }

变量?howMany 返回,假设是 20(绘画)——到目前为止,一切都很好。我想创建另一个查询,使用ASK WHERE 来检查艺术家是否画了超过10 幅画,预期结果为truefalse

我尝试在查询的ASK 部分中使用?numberOfPaintings &gt; 10,我知道我仍然需要使用COUNT,但到目前为止我只在@ 的上下文中看到&gt; 运算符987654330@ 函数,所以我不知道如何在其他情况下使用它,比如这个。

【问题讨论】:

    标签: count subquery sparql


    【解决方案1】:

    另一种方法,效果大致相同:HAVING 是在聚合操作后应用过滤器的方式:

    PREFIX dc: <http://purl.org/dc/terms/>  
    SELECT (COUNT(?numberOfPaintings) AS ?howMany)  
    WHERE  {  ?numberOfPaintings dc:creator "Artists_Name" . }
    HAVING ( ?howMany > 7 )
    

    然后您可以嵌入到 ASK 查询中。

    【讨论】:

    • 这是比my answer 更好的解决方案。我很少使用 HAVING,以至于我忘记了它。
    • 感谢您抽出宝贵时间回答我的问题。我很高兴看到这两种情况。我也忘记了“拥有”!
    【解决方案2】:

    注意:AndyS's answer 更适合这种特定情况。虽然我在这里使用的嵌套select 查询和过滤表达式对于更复杂的查询限制可能是必要的,但使用having 可以更轻松地解决这种特殊情况。

    假设你有这样的数据:

    @prefix : <https://stackoverflow.com/questions/19826515/> .
    
    :a1 :p :b1, :b2, :b3 .
    :a2 :p :b1, :b2, :b3, :b4 .
    :a3 :p :b1, :b2, :b3, :b4, :b5 .
    

    然后是这样的查询:

    select ?a (count(?b) as ?num) where {
      ?a :p ?b 
    }
    group by ?a
    

    返回每个?a 及其?bs 的数量:

    -------------
    | a   | num |
    =============
    | :a3 | 5   |
    | :a1 | 3   |
    | :a2 | 4   |
    -------------
    

    现在您只需将该查询包装在另一个查询中并过滤?num &gt; ...。例如,。对于3

    prefix : <https://stackoverflow.com/questions/19826515/>
    ask where { 
      {
        select ?a (count(?b) as ?num) where {
          ?a :p ?b 
        }
        group by ?a
      }
      filter( ?num > 3 )
    }
    
    Yes
    

    对于7,我们不会:

    prefix : <https://stackoverflow.com/questions/19826515/>
    ask where { 
      {
        select ?a (count(?b) as ?num) where {
          ?a :p ?b 
        }
        group by ?a
      }
      filter( ?num > 7 )
    }
    
    No
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多