2017-02-26 67 views
0

我試圖通過確定有多少人說出他們,從世界表格中列出世界上最常用的語言列表。從最常見到最不常見的列排序

到目前爲止,我有:

SELECT DISTINCT language, TRUNCATE((country.population * countrylanguage.percentage/100), 0) AS People 
FROM countrylanguage, country 
WHERE code = countrycode 
ORDER BY People DESC 

這幾乎給我我想要的,但語言不會增加正確,例如英文顯示了多次爲它提到作爲一門語言,每次。我知道我錯了某個地方,我無法弄清楚在哪裏。

enter image description here

編輯:鋸PIC是挪威。左欄是語言,右是說他們的人數。

+0

你能向我們展示樣品表數據嗎? –

回答

2

您可能打算在此處進行某種聚合。我猜你應該聚集的揚聲器數量超過每一種語言,然後報告此:

SELECT t1.language, 
     TRUNCATE(SUM(t2.population * t1.percentage/100), 0) AS people 
FROM countrylanguage t1 
INNER JOIN country t2 
    ON t1.countrycode = t2.code 
GROUP BY t1.language 
ORDER BY people DESC 

請注意,我已經更換您的默許與使用INNER JOINON條款沿着明確的一個連接。大多數人認爲通過這種方式編寫帶有連接的查詢是可取的,因爲它可以更容易地看到發生了什麼。

+0

我會記住這一點,以便將來參考,使用連接。此外,SUM似乎是我想念的東西。我簡直不敢相信我的想法。非常感謝您花時間幫忙。 – PQuix

0

你想要一個JOIN和聚集性,聚合函數:

SELECT cl.language, 
     TRUNCATE(SUM(c.population * cl.percentage)/100), 0) AS People 
FROM countrylanguage cl JOIN 
    country c 
    ON c.code = cl.countrycode 
GROUP BY cl.language 
ORDER BY People DESC; 

用於此目的的使用TRUNCATE()似乎很奇怪。你想要返回People作爲一個整數。更典型的功能是FLOOR()

SELECT cl.language, 
     FLOOR(SUM(c.population * cl.percentage)/100) AS People 
FROM countrylanguage cl JOIN 
    country c 
    ON c.code = cl.countrycode 
GROUP BY cl.language 
ORDER BY People DESC; 
+0

@TimBiegeleisen。 。 。我在發佈之前一定已經開始了。 –

+0

@TimBiegeleisen。 。 。說實話,這篇文章以一個關於在sum()中使用'select distinct'的謾罵開始。 。 。那麼我意識到OP在'select'中沒有'sum()',那就是問題所在。通常,我的答案會更快;) –