维基数据按人口对给定州的城市进行排序
Wikidata sort cities in a given state by population
我希望使用维基数据按人口重新创建 this list 德克萨斯州的城市。
我知道我可以用 this query:
按人口统计状态
SELECT DISTINCT ?state ?stateLabel ?population
{
?state wdt:P31 wd:Q35657 ;
wdt:P1082 ?population .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
GROUP BY ?state ?population ?stateLabel
ORDER BY DESC(?population)
德克萨斯州的 ID 是 wd:Q1439
所以我试过了the following:
SELECT ?country ?countryLabel ?state ?stateLabel ?city ?cityLabel ?population
WHERE
{
# ?state wdt:P31 wd:Q35657 . # Give me an american state
?state wdt:P31 wd:Q1439 . # that state is is Texas
?city wdt:P31 wd:Q515 . # it is an instance of city
?city wdt:P17 ?country. # get the country (for double-checking)
?city wdt:P361 ?state. # get the state it belongs to
?city wdt:P1082 ?population . # get the population of the city
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
ORDER BY DESC(?population) limit 68
没有匹配项。正确的查询是什么?
更新
这returns data,但不正确。它错过了休斯顿、圣安东尼奥等城市
SELECT ?mun ?munLabel ?population WHERE {
{
SELECT distinct ?mun ?population WHERE {
values ?habitation {
wd:Q3957
wd:Q515
wd:Q15284
}
?mun (wdt:P31/(wdt:P279*)) ?habitation;
wdt:P131 wd:Q1439;
# wdt:P625 ?loc;
wdt:P1082 ?population .
}
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
ORDER BY DESC(?population)
问题是休斯顿和圣安东尼奥的位置分别列为哈里斯县和贝克萨尔县,这些县位于德克萨斯州。如果您尝试此查询,它应该有效:
SELECT ?mun ?munLabel ?population WHERE {
{
SELECT distinct ?mun ?population WHERE {
values ?habitation {
wd:Q3957
wd:Q515
wd:Q15284
}
?mun (wdt:P31/(wdt:P279*)) ?habitation;
wdt:P131+ wd:Q1439; #Add '+' here for transitivity
# wdt:P625 ?loc;
wdt:P1082 ?population .
}
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
ORDER BY DESC(?population)
诀窍是在 wdt:P131
旁边添加 +
,它将查询从“查找 exactly one wdt:P131
edge”翻译过来“寻找 一个或多个 wdt:P131
边”。
这解决了这个问题,因为哈里斯县和贝克萨尔县本身被列为位于德克萨斯州。
我希望使用维基数据按人口重新创建 this list 德克萨斯州的城市。
我知道我可以用 this query:
按人口统计状态SELECT DISTINCT ?state ?stateLabel ?population
{
?state wdt:P31 wd:Q35657 ;
wdt:P1082 ?population .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
GROUP BY ?state ?population ?stateLabel
ORDER BY DESC(?population)
德克萨斯州的 ID 是 wd:Q1439
所以我试过了the following:
SELECT ?country ?countryLabel ?state ?stateLabel ?city ?cityLabel ?population
WHERE
{
# ?state wdt:P31 wd:Q35657 . # Give me an american state
?state wdt:P31 wd:Q1439 . # that state is is Texas
?city wdt:P31 wd:Q515 . # it is an instance of city
?city wdt:P17 ?country. # get the country (for double-checking)
?city wdt:P361 ?state. # get the state it belongs to
?city wdt:P1082 ?population . # get the population of the city
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
ORDER BY DESC(?population) limit 68
没有匹配项。正确的查询是什么?
更新
这returns data,但不正确。它错过了休斯顿、圣安东尼奥等城市
SELECT ?mun ?munLabel ?population WHERE {
{
SELECT distinct ?mun ?population WHERE {
values ?habitation {
wd:Q3957
wd:Q515
wd:Q15284
}
?mun (wdt:P31/(wdt:P279*)) ?habitation;
wdt:P131 wd:Q1439;
# wdt:P625 ?loc;
wdt:P1082 ?population .
}
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
ORDER BY DESC(?population)
问题是休斯顿和圣安东尼奥的位置分别列为哈里斯县和贝克萨尔县,这些县位于德克萨斯州。如果您尝试此查询,它应该有效:
SELECT ?mun ?munLabel ?population WHERE {
{
SELECT distinct ?mun ?population WHERE {
values ?habitation {
wd:Q3957
wd:Q515
wd:Q15284
}
?mun (wdt:P31/(wdt:P279*)) ?habitation;
wdt:P131+ wd:Q1439; #Add '+' here for transitivity
# wdt:P625 ?loc;
wdt:P1082 ?population .
}
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
ORDER BY DESC(?population)
诀窍是在 wdt:P131
旁边添加 +
,它将查询从“查找 exactly one wdt:P131
edge”翻译过来“寻找 一个或多个 wdt:P131
边”。
这解决了这个问题,因为哈里斯县和贝克萨尔县本身被列为位于德克萨斯州。