sparql查询mysql_汇总SPARQL查询的结果

您可以GROUP BY通过标识推文的变量,然后使用这些变量GROUP_CONCAT将哈希标签连接到类似数组的内容中,但是仍然需要稍后解析的字符串。例如,给定的数据像@prefix smo:  .@prefix :  .:tweet1 smo:tweeted_at "1" ;

smo:has_hashtag "tag1", "tag2", "tag3" ;

smo:tweeted_by "user1" ;

smo:english_tweet true .:tweet2 smo:tweeted_at "2" ;

smo:has_hashtag "tag2", "tag3", "tag4" ;

smo:tweeted_by "user2" ;

smo:english_tweet true .

您可以使用类似的查询prefix smo: select ?tweet ?date ?account (group_concat(?hashtag) as ?hashtags) where {

?tweet smo:tweeted_at ?date ;

smo:has_hashtag ?hashtag ;

smo:tweeted_by ?account ;

smo:english_tweet true .}group by ?tweet ?date ?account

得到如下结果:--------------------------------------------------| tweet      | date | account | hashtags         |==================================================| smo:tweet2 | "2"  | "user2" | "tag4 tag3 tag2" || smo:tweet1 | "1"  | "user1" | "tag3 tag2 tag1" |--------------------------------------------------

您可以指定在组串联中使用的定界符,因此,如果某些字符不能出现在主题标签中,则可以将其用作定界符。例如,假设|不能出现在主题标签中,则可以使用:(group_concat(?hashtag;separator="|") as ?hashtags)

相反,得到--------------------------------------------------| tweet      | date | account | hashtags         |==================================================| smo:tweet2 | "2"  | "user2" | "tag4|tag3|tag2" || smo:tweet1 | "1"  | "user1" | "tag3|tag2|tag1" |--------------------------------------------------

如果您使用的是具有某种文字数组语法的语言,则您甚至可以复制该语法:(concat('[',group_concat(?hashtag;separator=","),']') as ?hashtags)----------------------------------------------------| tweet      | date | account | hashtags           |====================================================| smo:tweet2 | "2"  | "user2" | "[tag4,tag3,tag2]" || smo:tweet1 | "1"  | "user1" | "[tag3,tag2,tag1]" |----------------------------------------------------

现在,它不会影响此处的数据,但是group_concat如果数据中存在重复项,则实际上会将重复项包括在内。例如,从以下内容开始(values为了示例,我只是在其中提供数据):prefix : select ?tweet (concat('[',group_concat(?hashtag;separator=','),']') as ?hashtags)where {

values (?tweet ?hashtag) {

(:tweet1 "tag1") (:tweet1 "tag1") (:tweet1 "tag2") (:tweet1 "tag3")

(:tweet2 "tag2") (:tweet2 "tag3") (:tweet2 "tag4")

}}group by ?tweet

我们得到的结果包括[tag1,tag1,tag2,tag3],即?hashtag包含的重复值:-------------------------------------| tweet   | hashtags                |=====================================| :tweet2 | "[tag2,tag3,tag4]"      || :tweet1 | "[tag1,tag1,tag2,tag3]" |-------------------------------------

我们可以使用group_concat(distinct ?hashtag;...)以下方法避免这种情况:prefix : select ?tweet (concat('[',group_concat(distinct ?hashtag;separator=','),']') as ?hashtags)where {

values (?tweet ?hashtag) {

(:tweet1 "tag1") (:tweet1 "tag1") (:tweet1 "tag2") (:tweet1 "tag3")

(:tweet2 "tag2") (:tweet2 "tag3") (:tweet2 "tag4")

}}group by ?tweet--------------------------------| tweet   | hashtags           |================================| :tweet2 | "[tag2,tag3,tag4]" || :tweet1 | "[tag1,tag2,tag3]" |--------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值