Sql 当唯一的连接是count时,如何求和值?
我想把我统计过的国家的人口(Country.population)加起来 创建表的代码:Sql 当唯一的连接是count时,如何求和值?,sql,Sql,我想把我统计过的国家的人口(Country.population)加起来 创建表的代码: SELECT Country.NAME, COUNT(Politics.DEPENDENT) as Number_of__dependent_countries FROM Country JOIN Politics ON Politics.DEPENDENT = Country.CODE GROUP BY Country.NAME; 更新:您希望获得受抚养国家的人口总数。附属国甚至还没有加入。您必须再次
SELECT Country.NAME, COUNT(Politics.DEPENDENT) as Number_of__dependent_countries
FROM Country
JOIN Politics ON Politics.DEPENDENT = Country.CODE
GROUP BY Country.NAME;
更新:您希望获得受抚养国家的人口总数。附属国甚至还没有加入。您必须再次加入国家/地区表:
CREATE TABLE Country
(Name VARCHAR(40) NOT NULL UNIQUE,
Code VARCHAR(4) CONSTRAINT CountryKey PRIMARY KEY,
Capital VARCHAR(40),
Province VARCHAR(40),
Area INTEGER CONSTRAINT CountryArea
CHECK (Area >= 0),
Population INTEGER CONSTRAINT CountryPop
CHECK (Population >= 0));
演示:
原始答复:
您需要来自国家/地区的行加上一个聚合,因此可以加入聚合结果:
SELECT
c.name,
COUNT(*) as number_of_dependent_countries,
SUM(cd.population) AS population_of_dependent_countries
FROM country c
JOIN politics p ON p.dependent = c.code
JOIN country cd ON cd.code = p.country
GROUP BY c.name
ORDER BY c.name;
或在select子句中使用子查询:
SELECT
c.name, c.population,
COALESCE(d.countries, 0) AS number_of_dependent_countries
FROM country c
LEFT JOIN
(
SELECT dependent, COUNT(*) AS countries
FROM politics
GROUP BY dependent
) d ON d.dependent = c.code
ORDER BY c.name;
所以使用
SUM(Country.Population)
?提供样本表数据和预期结果问题是数据非常大,因此没有必要对样本数据进行私有化。如果使用SUM(Country.Population),我会得到一个错误,即整数.SUM的值太大(CAST(Country.Population AS BIGINT))如果我使用子查询,我总是得到这样一条信息:它只对一行有效。但是COUNT(*)
withoutgroupby
只返回一行。我如何使用子查询进行多选?虽然你的代码似乎给出了该国的人口,其他国家依赖于哪个国家,我想要依赖另一个国家的人口总数。例如,我得到了3个依赖于同一个国家的国家,它们是另一个国家的领土。通过Count(Politics.Dependent)
我得到了依赖于同一个国家的国家的数量,通过总和我想得到所有这些国家的人口。
SELECT
c.name, c.population,
COALESCE(d.countries, 0) AS number_of_dependent_countries
FROM country c
LEFT JOIN
(
SELECT dependent, COUNT(*) AS countries
FROM politics
GROUP BY dependent
) d ON d.dependent = c.code
ORDER BY c.name;
SELECT
c.name, c.population,
(
SELECT COUNT(*)
FROM politics p
WHERE p.dependent = c.code
) AS number_of_dependent_countries
FROM country c
ORDER BY c.name;