Как сгруппировать элементы в SPARQL, накапливая записи с низким количеством попаданий? - PullRequest
0 голосов
/ 18 февраля 2019

Как подсчитать сгруппированные записи в SPARQL, объединяя записи, количество которых меньше определенного фактора?

Рассмотрим, например, данные Нобелевской премии .Я мог бы получить счетчик всех фамилий с помощью запроса, например

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name (count(*) as ?count) WHERE {
  ?id foaf:familyName ?name
}
GROUP BY $name
ORDER BY DESC($count)

. Как мне изменить запрос, чтобы он возвращал только фамилии, встречающиеся как минимум 3 раза, накапливая другие имена как other.

1 Ответ

0 голосов
/ 18 февраля 2019

Просто оберните ваш SELECT в другой.

Запрос

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name_ (SUM(?count) AS ?count_) {
  {
    SELECT ?name (COUNT(*) AS ?count) { 
      ?id foaf:familyName ?name
    } GROUP BY ?name
  }
  BIND (IF(?count > 2, ?name, "Other") AS ?name_)
} GROUP BY ?name_ ORDER BY DESC(IF(?name_ = "Other", -1 , ?count_))

Результаты

   name_       count_  
 ----------- --------- 
   Smith         5     
   Fischer       4     
   Wilson        4     
   Lee           3     
   Lewis         3     
   Müller        3     
   Other       878  
...