Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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 当唯一的连接是count时,如何求和值?_Sql - Fatal编程技术网

Sql 当唯一的连接是count时,如何求和值?

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; 更新:您希望获得受抚养国家的人口总数。附属国甚至还没有加入。您必须再次

我想把我统计过的国家的人口(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;

更新:您希望获得受抚养国家的人口总数。附属国甚至还没有加入。您必须再次加入国家/地区表:

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(*)
without
groupby
只返回一行。我如何使用子查询进行多选?虽然你的代码似乎给出了该国的人口,其他国家依赖于哪个国家,我想要依赖另一个国家的人口总数。例如,我得到了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;