以下查询得到错误答案

时间:2019-03-14 05:55:01

标签: sql oracle

使用CITY和COUNTRY表,查询所有大洲的名称(COUNTRY.Continent)及其各自的平均城市人口(CITY.Population),四舍五入到最接近的整数。

注意:CITY.CountryCode和COUNTRY.Code是匹配的键列。

国家模式

COUNTRY SCHEMA

城市图则

CITY SCHEMA

接受一个

select COUNTRY.CONTINENT, FLOOR(AVG(CITY.POPULATION)) 
FROM COUNTRY , CITY WHERE COUNTRY.CODE = CITY.COUNTRYCODE GROUP BY COUNTRY.CONTINENT;

我们知道,在国家/地区表中,给出了每个国家/地区的人口,我们可以使用 国家表本身在这里,所以我为什么对此给出错误的答案?

SELECT C1.CONTINENT , FLOOR(AVG(C1.POPULATION))
FROM COUNTRY C1,COUNTRY C2    WHERE C1.CODE=C2.CODE GROUP BY C1.CONTINENT;

1 个答案:

答案 0 :(得分:2)

在第一个查询中,您正在计算每个大陆的平均城市人口。

第二个查询是不同的,因为它可以计算每个大陆的平均国家人口(nb:无需加入即可获得该结果,对COUNTRY的简单汇总查询为足够)。

关于(第一个)查询的注释:始终使用显式JOIN语法而不是隐式的老式JOIN。使用表别名也是一个好习惯:它们使查询更具可读性

考虑:

SELECT 
    co.CONTINENT,
    FLOOR(AVG(ci.POPULATION)) 
FROM COUNTRY co
INNER JOIN CITY ci ON co.CODE = ci.COUNTRYCODE 
GROUP BY co.CONTINENT