Here是以下查询的浏览输出,试图获取广告牌前100名中的单曲:
PREFIX prop: <http://dbpedia.org/property/>
PREFIX ont: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?page, ?artist, ?relYear, ?released, ?runTime WHERE {
?page dct:subject dbc:Billboard_Hot_100_number-one_singles .
OPTIONAL {?page prop:artist ?artist}.
OPTIONAL {?page prop:relyear ?relYear}.
OPTIONAL {?page prop:released ?released}.
OPTIONAL {?page ont:runtime ?runTime}
}
我把relYear和释放因为有些单身有一个,有些有另一个,有些有两个,有些没有。
如果查看输出,它会复制行:一行是relYear,另一行是已释放。我想要像SQL COALESCE(released, relYear)
这样的东西,即在一行中给我存在的第一个元素(release,relYear)。
我该怎么做?
P.S。我对艺术家和音乐艺术家有同样的问题,等等,所以行最终会像疯了一样倍增。
P.P.S。看着this,但没有用。
答案 0 :(得分:2)
基本上,您已经知道答案,请使用COALESCE
:
PREFIX prop: <http://dbpedia.org/property/>
PREFIX ont: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?page ?artist (coalesce(?relYear, ?released) as ?releaseYear) ?runTime WHERE {
?page dct:subject dbc:Billboard_Hot_100_number-one_singles .
OPTIONAL {?page prop:artist ?artist}.
OPTIONAL {?page prop:relyear ?relYear}.
OPTIONAL {?page prop:released ?released}.
OPTIONAL {?page ont:runtime ?runTime}
}
但是,我猜你已经发现,同一个单曲可以有多个版本,由不同的艺术家完成并在不同的版本中完成,因此,你可能会为同一个版本获得多行。作为一个极端的例子,请看Total_Eclipse_of_the_Heart
+------------------------------+--------------------------------+-------------+---------+
| page | artist | releaseYear | runTime |
+------------------------------+--------------------------------+-------------+---------+
| :Total_Eclipse_of_the_Heart | "Bonnie Tyler"^^rdf:langString | 1983 | 180.0 |
| :Total_Eclipse_of_the_Heart | "Nicki French"^^rdf:langString | 1983 | 180.0 |
| :Total_Eclipse_of_the_Heart | "Bonnie Tyler"^^rdf:langString | 1995 | 180.0 |
| :Total_Eclipse_of_the_Heart | "Nicki French"^^rdf:langString | 1995 | 180.0 |
| :Total_Eclipse_of_the_Heart | "Bonnie Tyler"^^rdf:langString | 2012 | 180.0 |
| :Total_Eclipse_of_the_Heart | "Nicki French"^^rdf:langString | 2012 | 180.0 |
| :Total_Eclipse_of_the_Heart | "Bonnie Tyler"^^rdf:langString | 1983 | 230.0 |
| :Total_Eclipse_of_the_Heart | "Nicki French"^^rdf:langString | 1983 | 230.0 |
| :Total_Eclipse_of_the_Heart | "Bonnie Tyler"^^rdf:langString | 1995 | 230.0 |
| :Total_Eclipse_of_the_Heart | "Nicki French"^^rdf:langString | 1995 | 230.0 |
| :Total_Eclipse_of_the_Heart | "Bonnie Tyler"^^rdf:langString | 2012 | 230.0 |
| :Total_Eclipse_of_the_Heart | "Nicki French"^^rdf:langString | 2012 | 230.0 |
| ... | ... | ... | ... |
+------------------------------+--------------------------------+-------------+---------+
你可以在这里做一些group by
的亲属,至少每个艺术家只能获得一行,例如结合group_concat
或sample