Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的嵌套选择_Sql_Oracle - Fatal编程技术网

SQL中的嵌套选择

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' 当我运行下面修改过的查询时

我正在尝试SQL zoo的嵌套选择中的第五个问题(使用Oracle引擎)

显示欧洲每个国家的名称和人口。展示 人口占德国人口的百分比

我知道正确的答案(见下文),但有些事情使我困惑

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;