我正在学习 SQL(特别是 mySQL),并且一直在解决 sqlzoo 上的问题集。
我被 one problem that is asking me to show the population of a country as a percentage of some other country. 难倒了它是数字 5。请注意没有显示完整的表格,但是表格的内容可以根据参数推断:world(name, continent, area, population, gdp)
我不确定两件事:
- 如何实现两列数据之间的划分功能,以及
- 如何在不创建新变量的情况下(使用“AS”)将此数据转换为百分比。
这是我尝试过的(为了便于阅读而缩进):
SELECT name, CONCAT(ROUND(new_population))from world WHERE
continent = 'Europe' AND
((SELECT population AS new_population from world) /
(SELECT population FROM world where name='Germany'));
给出的错误是“‘字段列表’中的未知列‘new_population’”,这让我相信我不明白“AS”是如何工作的。
我意识到这实际上没有意义,因为“AND”之后的值是新值,因此它们不能作为我原始 select 语句的条件。但我不太确定如何以其他方式合并该功能。
此外,请耐心等待,因为这是我自学的,所以我真的没有人可以指导我完成它。谢谢!
最佳答案
您走在正确的轨道上,但您想在 SELECT
中向上而不是在 WHERE
中执行此逻辑。 WHERE
仅用于过滤结果集。 SELECT
是您在结果集中放置所需内容的地方。
SELECT
name,
population/(SELECT population FROM world WHERE name='Germany' limit 1) * 100
FROM world
WHERE continent = 'Europe'
或者,您可以使用 CROSS JOIN
执行此操作:
SELECT
name,
world.population/germany.population * 100
FROM world CROSS JOIN (SELECT population FROM world WHERE name = 'Germany') as germany
WHERE continent = 'Europe'
不太确定哪个更适合您正在学习的教程。
关于mysql - 在 SQL 中,如何输出对多个列执行函数的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33399716/