我目前正在尝试为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)
谢谢大家!
答案 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)