按人数对子专业进行计数和排名

时间:2019-02-23 18:21:47

标签: nested sparql wikidata

我目前正在尝试为Wikidata写一个SPARQL查询,在其中我根据有相应职业的人数对子专业进行排名,并根据其父职业按字母顺序对其进行分组。 我的最终结果应该类似于

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 :(得分:2)

好吧,似乎有些职业和子职业没有英语标签,因此有些清单不是很有帮助。此外,此列表很长!您可能想聚合更多或以某种方式限制结果。

这是您可能想要的开始:

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)