SPARQL中的GROUP BY?

时间:2014-03-08 10:45:46

标签: sparql

假设我使用FOAF本体。我想为每个人返回namembox。我使用以下查询:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?name ?email
WHERE {
  ?person foaf:name ?name.
  ?person foaf:mbox ?email.
}

联接的结果是一组行:?person?name?email。此查询返回?name?email。请注意,在某些?person中可能有多个邮箱,因此在返回的集中,?name行可能会多次出现,每个邮箱一次。

是否有解决方案来制作GROUP BY person ?name

1 个答案:

答案 0 :(得分:2)

您可以按人分组但是您需要?name?email的汇总

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT (sample(?name) AS ?name2) (sample(?email) as ?email2)
WHERE {
  ?person foaf:name ?name.
  ?person foaf:mbox ?email.
} GROUP BY ?person

SAMPLE为每个?person从小组中挑选一个。

或者

SELECT (group_concat(?name) AS ?names)

(除了那是一个字符串)。

使用

可能更容易
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?email
WHERE {
  ?person foaf:name ?name.
  ?person foaf:mbox ?email.
} 
ORDER BY ?person ?name ?email

并在您的应用程序中处理结果,您知道传入的结果包含一个人的所有条目是结果的单个部分。