我正在尝试查询CONTINENT为“亚洲”的所有城市的人口总和。 两个表CITY和COUNTRY如下,
city - id, countrycode, name population
country - code, name, continent, population
这是我的查询
SELECT SUM(POPULATION) FROM COUNTRY CITY
JOIN ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE CONTINENT = "Asia";
这不起作用。我究竟做错了什么。我是SQL的新手。
答案 0 :(得分:3)
它无效,因为您编写CITY
的方式被解释为COUNTRY
的表别名。此外,您似乎在每个表中都有一个POPULATION列,因此您需要消除它的歧义。让我为你重写一下这个问题:
SELECT SUM(CITY.POPULATION)
FROM COUNTRY
JOIN CITY
ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE COUNTRY.CONTINENT = "Asia";
答案 1 :(得分:2)
我知道问题已经回答,但我想提出优化的解决方案。下面的解决方案将减少执行时间,同时减少执行SQL查询的资源。
select sum(a.population) from city a
inner join(select * from country where continent = 'Asia') b
on a.countrycode=b.code;
我想在此之上再作一点解释,因为您看到我在执行Join操作之前正在应用过滤条件。因此,在改组阶段,数据将非常少,因此查询将花费更少的时间来执行。在较小的数据量中不会看到性能的急剧变化,但是在大型数据集中运行此查询时,可以看到性能的提高。
答案 2 :(得分:1)
SELECT SUM(COUNTRY.POPULATION)
FROM COUNTRY
JOIN CITY
ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE CONTINENT = "Asia";
答案 3 :(得分:1)
JOIN需要在两个表名之间进行:
SELECT SUM(CITY.POPULATION) FROM COUNTRY INNER JOIN CITY
ON COUNTRY.CODE = CITY.COUNTRYCODE
WHERE CONTINENT = "Asia";
答案 4 :(得分:1)
SELECT sum(city.population) FROM city LEFT JOIN country ON city.countrycode=country.code
WHERE country.continent='Asia'
答案 5 :(得分:0)
SELECT SUM(CITY.POPULATION)
FROM CITY
INNER JOIN COUNTRY ON CITY.COUNTRYCODE = COUNTRY.Code
where COUNTRY.CONTINENT = 'Asia';
第3行具有INNER JOIN
,因为两个表中都有一列是两者共有的
答案 6 :(得分:0)
您可以使用Oracle运行以下代码。
SELECT SUM(c.POPULATION)
FROM CITY c
INNER JOIN COUNTRY co ON c.CountryCode = co.Code
WHERE CONTINENT ='Asia' ;
答案 7 :(得分:0)
select SUM(cty.POPULATION) from COUNTRY cntry, CITY cty where cty.COUNTRYCODE=cntry.CODE AND cntry.CONTINENT='Asia';
答案 8 :(得分:0)
select sum(S.Population)
from City S
where S.CountryCode in (select Code
from Country C
where CONTINENT = 'Asia');
答案 9 :(得分:-1)
请参阅以下示例代码:
SELECT SUM(A.POPULATION)
FROM CITY A
JOIN COUNTRY B
ON A.COUNTRYCODE = B.CODE
WHERE B.CONTINENT = 'Asia';``