【发布时间】:2019-12-09 17:03:39
【问题描述】:
我正在自学 SQL 并搜索练习进行练习,但我遇到了一个问题。
2010年各大洲的总人口是多少?
我们有 2 个表“countries”和“years_population”,这是它的架构
CREATE TABLE countries (
id INTEGER NOT NULL,
name TEXT NOT NULL,
continent TEXT NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE population_years (
id INTEGER NOT NULL,
population NUMBER,
year NUMBER,
country_id INTEGER NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(country_id) REFERENCES countries(id)
);
为了解决这个问题,我尝试了这段代码,但没有成功:
SELECT SUM(population) FROM population_years
JOIN countries ON countries.id = population_years.country_id
GROUP BY continent HAVING year = 2010;
但是解决办法是这样的:
SELECT SUM(population), continent FROM population_years
INNER JOIN countries ON
countries.id = population_years.country_id
WHERE year = 2010
GROUP BY continent;
我的逻辑是将人口相加,然后按年份加入国家及其人口(JOIN 子句),然后 GROUP BY 大陆,最后选择年份,但我的逻辑有什么问题?
【问题讨论】:
-
您需要将聚合结果过滤为总和(人口)。如果该值不是聚合结果,您可以使用 where。年份是保存在表格行中的数据,因此您可以使用 where