我试图通过确定有多少人说出世界上最常见的语言列表,从世界桌面开始。
到目前为止,我有:
SELECT DISTINCT language, TRUNCATE((country.population * countrylanguage.percentage / 100), 0) AS People
FROM countrylanguage, country
WHERE code = countrycode
ORDER BY People DESC
它几乎给了我想要的东西,但语言不会正确加起来,例如英语每次作为一种语言被提及时多次出现。我知道我在某个地方弄错了,我无法弄清楚在哪里。
编辑:Saw 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 JOIN
和ON
子句的显式连接。大多数人认为以这种方式编写带有连接的查询是合乎需要的,因为它可以更容易地看到发生了什么。
答案 1 :(得分: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;