考虑到我拥有以下RDF数据
:car1 :hasColor :red.
:car1 :hasColor :blue.
:car2 :hasColor :blue.
:car2 :hasColor :red.
我想按颜色设置对汽车进行计数,即,这将导致单个组{:blue,:red}和组{:car1,:car2}中的两辆汽车,并且计数将为2。查询看起来像执行要求的直观方式。但是,不能保证总能正常工作,因为GROUP_CONCAT在连接字符串之前会删除所有顺序(请参见another question here)。这意味着:第一辆车我可以得到":red :blue"
,第二辆车我可以得到":blue :red"
,这样就不会在同一组中将它们考虑在内。
有什么方法可以实现我想要的吗?
SELECT (COUNT(?car) AS ?count) ?colorGroup
WHERE
{ { SELECT ?car (GROUP_CONCAT(?color) AS ?colorGroup)
WHERE
{ { SELECT ?car ?color
WHERE
{ ?car :hasColor ?color }
ORDER BY ?color
}
}
GROUP BY ?car
}
}
GROUP BY ?colorGroup