我有一個包含歷史遷移數據的表。它包含移民來自的國家,地區和城鎮的字段。我想獲得一張表格,顯示每個有100個或更多數據集條目的城鎮的條目數量,以及它們一起提及的地區和國家的數量以及該地區和國家/地區的數據集條目的相應數量。爲什麼我的3 INNER JOIN在不同組和計數的同一張桌子上不適用於sqlite?
如果我做簡單的GROUP BY城鎮,COUNT會爲地區和國家總是在一個城鎮的集團內,這樣我就無法計算該地區和國家的參賽總數。
country | sum_country | region | sum_region | town | sum_town
Germany | 324,213 | Prussia | 324,213 | Berlin | 324,213
所以我嘗試了一個INNER JOIN與不同的分組和計數在同一個數據表(使用不同的別名)。
select a.country, c.summe_land, a.last_province, e.summe_region, a.last_town, count (a.last_town)
from migrant_data as a
inner join
(select b.country, count(b.country) as summe_land
from migrant_data as b group by b.country) as c
on a.country = c.country
inner join
(select d.last_province, count(d.last_province) as summe_region
from migrant_data as d group by d.last_province) as e
on a.last_province = e.last_province
group by a.country, c.summe_land, a.last_province, e.summe_region, a.last_town
having count(a.last_town) >99
order by c.summe_land desc, e.summe_region desc, count (a.last_town) desc;
這工作正常與國家和地區的兩個內部聯接。
country | sum_country | region | sum_region | town | sum_town
Germany | 4,546,321 | Prussia | 864,345 | Berlin | 324,213
Germany | 4,546,321 | Unknown | 3,845,321 | Berlin | 640,139
在結果我發現我有很多的城鎮了在不同國家或地區的情況下提及(作爲歷史數據都不是很一致的)。爲了瞭解這一現象的數量,我想集成第三個INNER JOIN來計算任何國家 - 地區 - 城鎮星座中每個城鎮的入場總數。結果應該是這樣的:
country | sum_country | region | sum_region | town | sum_town | sum_total_town
Germany | 4,546,321 | Prussia | 864,345 | Berlin | 324,213 | 964,352
Germany | 4,546,321 | Unknown | 3,845,321 | Berlin | 640,139 | 964,352
試圖在DB瀏覽器這個查詢SQLite的,我得到的是說,一個錯誤信息:
'near "(": syntax error:'
這裏是我的代碼無法正常工作:
select a.country, c.summe_land, a.last_province, e.summe_region, a.last_town, g.summe_stadt count (a.last_town) as summe_kombi
from migrant_data as a
inner join
(select b.country, count(b.country) as summe_land
from migrant_data as b group by b.country) as c
on a.country = c.country
inner join
(select d.last_province, count(d.last_province) as summe_region
from migrant_data as d group by d.last_province) as e
on a.last_province = e.last_province
inner join
(select f.last_town, count(f.last_town) as summe_stadt
from migrant_data as f group by f.last_town) as g
on a.last_town = g.last_town
group by a.country, c.summe_land, a.last_province, e.summe_region, a.last_town, g.summe_stadt
having count(a.last_town) >99
order by c.summe_land desc, e.summe_region desc, count (a.last_town) desc;
我仔細檢查了我的第三個INNER JOIN,但它的結構完全像前兩個INNER JOIN一樣運作良好。我不知道我該在哪裏或者不應該放置一個括號,或者在所使用的括號旁邊有什麼錯誤。
所以我不知道我做錯了第三個INNER JOIN。我發現了與三個INNER JOIN一起工作的stackoverflow上的各種示例,所以似乎可以聚合三個INNER JOIN。也許我忽略了一些非常簡單的東西,我是SQL查詢的新手(實際上我是歷史學家)。
有什麼建議嗎?感謝您的關注!
謝謝您的回覆快。逗號做了詭計。並感謝您提供更好的編寫命令的建議,謝爾幫助找到丟失的逗號。我想我將不得不找到一個更好地支持sql語法的編輯器。 – olaf