Подсчет и ранжирование подпрофессий по количеству людей - PullRequest
0 голосов
/ 23 февраля 2019

В настоящее время я пытаюсь написать SPARQL-запрос для Wikidata, в котором я оцениваю субпрофессии в соответствии с тем, сколько людей занимаются этой соответствующей профессией, и группирую их в соответствии с их родительской профессией в алфавитном порядке.Мой конечный результат должен выглядеть примерно так:

Profession | Subprofession | Count
Artist     | Painter       | 34
Artist     | Actor         | 12
Politician | President     | 67
Politician | Minister      | 13

. Прямо сейчас я мог бы только показать родительскую профессию, но я чувствую, что у меня есть долгий путь, чтобы ввести подпроцессию в запрос ипросто пытаясь показать его рядом с родителем, занятие все время ведет к Таймауту.Здесь я должен использовать вложенные SELECTS?Я не очень знаком с ними

SELECT ?occupation ?suboccupation (count(*) as ?count)
WHERE
{
    ?people wdt:P106 ?occupation . #occupation
    ?suboccupation wdt:P279 ?occupation . #subclassof
}
GROUP BY ?occupation ?suboccupation
ORDER BY DESC(?count)

Спасибо всем заранее!

1 Ответ

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

Ну, похоже, есть некоторые профессии и под-профессии, у которых нет ярлыка на английском языке, поэтому некоторые списки не очень полезны.Кроме того, этот список длинен!Вы можете собирать больше или ограничивать результаты каким-либо образом.

Вот начало того, что вы могли бы хотеть:

SELECT ?profLabel ?subprofLabel ?count
WITH {
  SELECT ?prof ?subprof (COUNT(?person) AS ?count) WHERE {
    ?prof wdt:P31 wd:Q28640.
    ?subprof wdt:P279+ ?prof.
    ?person wdt:P106 ?subprof.
  }
  GROUP BY ?prof ?subprof
} AS %main {
  INCLUDE %main .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
ORDER BY ?profLabel DESC(?count)
...