SQL中的嵌套选择
我正在尝试SQL zoo的嵌套选择中的第五个问题(使用Oracle引擎) 显示欧洲每个国家的名称和人口。展示 人口占德国人口的百分比 我知道正确的答案(见下文),但有些事情使我困惑SQL中的嵌套选择,sql,oracle,Sql,Oracle,我正在尝试SQL zoo的嵌套选择中的第五个问题(使用Oracle引擎) 显示欧洲每个国家的名称和人口。展示 人口占德国人口的百分比 我知道正确的答案(见下文),但有些事情使我困惑 SELECT name, CONCAT(ROUND(population/(SELECT population FROM world WHERE name = 'Germany'),2)*100,'%') FROM world WHERE continent = 'Europe' 当我运行下面修改过的查询时
SELECT name, CONCAT(ROUND(population/(SELECT population
FROM world WHERE name = 'Germany'),2)*100,'%')
FROM world WHERE continent = 'Europe'
当我运行下面修改过的查询时,只返回一行(阿尔巴尼亚)
SELECT name, population/(SELECT population
FROM world WHERE name = 'Germany')
FROM world WHERE continent = 'Europe'
想知道是否有人能解释甲骨文的内部运作,为什么只返回阿尔巴尼亚?我很不解为什么没有ROUND()它就不能工作。正确的答案实际上是:
SELECT name,
CONCAT(ROUND(population/(SELECT population FROM world WHERE name = 'Germany')*100,0),'%')
FROM world
WHERE continent = 'Europe'
请注意,结果集舍入为零十进制空间
也就是说,我尝试了上面的精确代码,仍然得到了所有国家的结果:
SELECT name,
population/(SELECT population FROM world WHERE name = 'Germany')
FROM world
WHERE continent = 'Europe'
您感到困惑是对的,因为无论是否使用
ROUND()
,它肯定会返回,但由于我无法重新创建它,因此无法解释它。更有效的Oracle查询(即摆脱子查询)是使用:
但是,sqlzoo似乎使用了MariaDB,因此您无法将该查询放入网站(但如果您在Oracle中重新创建该表,则可以对其进行测试)。对我来说效果很好。当我将您的第二个查询放入您在问题5下提供的网页时,它会为我返回大量结果。是的,运行您的精确查询也会为我返回许多欧洲国家。
SELECT name,
ROUND(
population
/ MAX( CASE name WHEN 'Germany' THEN population END ) OVER ()
* 100
) || '%'
FROM world;