微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何仅从可选属性中获取第一个值? 使用示例使用过滤器

如何解决如何仅从可选属性中获取第一个值? 使用示例使用过滤器

就像在 sql 聚合 MAX、MIN 或 FirsT 中一样,它只获取一个值,而不是重复行。

真实的维基数据案例

OPTIONAL 子句从 253 行扩展到 257 行:

<settings>:
    name: "screen_settings"
    GridLayout:
    
        cols: 2
        rows: 1
        Label:
            text: 'skip'
        
        CheckBox:
            active: root.skipbool
            on_active: root.skiplogin_click(self,self.active)

try here

我只需要一个(任意)# Countries and its codes SELECT ?code ?item ?itemLabel ?osmId WHERE { ?item wdt:P297 ?code. OPTIONAL{?item wdt:P402 ?osmId .} SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } ORDER BY ?code
如何做像osmId这样的事情?


注意:

解决方法

这是一个 WIKI 答案(请您可以编辑以增强此答案!)

# Countries and its codes
SELECT ?code  ?item ?itemLabel
       (MAX(?osmId) as ?osmId_max) (COUNT(?code) as ?osmId_n)  
WHERE 
{
  ?item wdt:P297 ?code.
  OPTIONAL{?item wdt:P402 ?osmId .}
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
GROUP BY ?code  ?item ?itemLabel 
ORDER BY ?code

try

COUNT(?code) 仅用于检查 osmId 不是唯一 ID 的行。

仅过滤第一个选项的其他简单解决方案?


使用示例

作为@ValerioCocchi 的建议,我们可以使用 SAMPLE 代替 MAX:

SELECT ?code  ?item ?itemLabel (SAMPLE(?osmId) as ?osmId_sample)
WHERE
{
  ?item wdt:P297 ?code.
  OPTIONAL{?item wdt:P402 ?osmId .}
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
GROUP BY ?code  ?item ?itemLabel 
ORDER BY ?code  

try

SAMPLE 使用更少的 CPU 时间,但使用的主要动机是当您不关心返回哪个值时。就维基数据而言,当属性值是唯一的但存在一些(最小)错误时,您可以忽略它们。

关于 osmId 的注意事项:MAX 在这个特定查询中的优点是,使用与时间序列相关的数字 ID,它可以是一个“更新鲜”的 ID。 . 但是在 OpenStreetMap (OSM) 中,策略可以是相反的:最旧的是最稳定的 ID。因此,SAMPLE 在对更好的策略一无所知的情况下也是有意义的。

使用过滤器

@StanislavKralin 的建议:

SELECT ?code  ?item ?itemLabel ?osmId
WHERE 
{
  ?item wdt:P297 ?code.
  OPTIONAL{
    ?item wdt:P402 ?osmId 
    FILTER NOT EXISTS {
      ?item wdt:P402 ?osmId,?osmId_ .
      FILTER (?osmId_ > ?osmId)
    }
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?code

try

看起来更冗长。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?