SQL 新手:同时使用 CONCAT 和 ROUND

Newbie in SQL: Using CONCAT and ROUND together

我正在努力自学 SQL,并且一直在使用 SQLZoo (http://sqlzoo.net) 等资源。 (根据错误信息,这似乎是在使用 MariaDB。)

他们的一个练习要求显示欧洲每个国家的名称和人口(来自 table 'world',其中列出了国家名称、人口、大陆和其他一些内容),但要显示人口占德国人口的百分比。他们在那里提到了 CONCAT 和 ROUND 函数,所以我假设他们想要一个“%”符号并且没有小数位。

我试过了:

SELECT name, 
(CONCAT
(ROUND(100 * population/(SELECT population FROM world WHERE name= 'Germany'), 0),
'%') 
FROM world
WHERE continent= 'Europe'

我认为我必须将所有内容都嵌套在一个又大又肥的烂摊子中。我原来最外层的SELECT是在计算的末尾加上'%',然后去掉小数位,再进行实际计算:按小数点占德国人口的百分比计算人口只需将该国家的人口除以德国的人口,再乘以 100,这样我就可以去掉小数位,在上面打一个百分号,然后就可以了。

问题是这会给我发回一条错误消息。该错误告诉我检查最后的语法 (FROM world WHERE continent = 'Europe').

谁能告诉我哪里出了问题?

您遇到了括号不平衡的问题。试试这个版本的查询:

SELECT
    name, 
    CONCAT(ROUND(100 * population /
           (SELECT population FROM world WHERE name= 'Germany'), 0), '%')
FROM world
WHERE continent = 'Europe'

如果在使用 concatround 时得到很多 0,试试这个。

select name, concat(cast(round(100*population/(select population from world where name='Germany'),0) as int),'%') as percentage from world where continent = 'Europe'