我正在使用两个不同的covid数据集,其中包括来自所有国家的报告数据。我遇到的问题是sum和group by函数,其中SQL正在对所有不必要地增加输出的分组行进行求和。举下面的例子,死亡总数应为4,849人,总数为17,441人。
*注:数据集包括每个国家的城市/省,下文已按国家分组
CREATE TABLE covid.deaths(
country varchar(255),
deaths int
);
CREATE TABLE covid.confirmed_cases(
country varchar(255),
cases int
); *country* *deaths* *cases*
China 0 747
China 0 519
China 0 1500
China 0 264
China 1 159
China 3 1992
China 2 1008
China 4 1632
China 7 1650
China 6 190
China 213 1260
China 8 1197
China 58 3260
China 13 362
China 22 703
China 4512 998然而,当我运行下面的查询时,总病例数为279,056例,死亡人数为77,584例。在试图自我解决这个问题时,我删除了一个sum函数(但保留了日期),发现在输出中,SQL正在填充所有行的全部数据,然后在两个sum函数都存在时对这些列进行求和(本质上说,SQL使用的是total deaths or cases x number of rows)。
SELECT
COALESCE(d.country_region, "Unknown") AS country,
SUM(d._11_16_21) as deaths,
SUM(c._11_16_21) as cases
FROM `covid.deaths` as d
JOIN `covid.confirmed_cases` as c
ON d.country_region = c.country_region
WHERE d.country_region = "China"
GROUP BY
d.country_region用cases sum 函数删除的输出
SELECT
COALESCE(d.country_region, "Unknown") AS country,
SUM(d._11_16_21) as deaths,
c._11_16_21 as cases
FROM `covid.deaths` as d
JOIN `covid.confirmed_cases` as c
ON d.country_region = c.country_region
WHERE d.country_region = "China"
GROUP BY
d.country_region, c._11_16_21
*country* *deaths* *cases*
China 4849 747
China 4849 519
China 4849 1500
China 4849 264
China 4849 159
China 4849 1992
China 4849 1008
China 4849 1632
China 4849 1650
China 4849 190
China 4849 1260
China 4849 1197
China 4849 3260
China 4849 362
China 4849 703
China 4849 998是否有一种方法让SQL只显示唯一的和作为输出?
*注:合并正在使用,因为有一些国名是null
发布于 2021-11-29 00:10:04
在加入贪得无厌的死亡病例之前,将它们分开计算。
SELECT
COALESCE(d.country_region, c.country_region, 'Unknown') AS country,
d.deaths,
c.cases
FROM (
SELECT country_region
, SUM(`_11_16_21`) as deaths
FROM `covid.deaths`
WHERE country_region = 'China'
GROUP BY country_region
) as d
JOIN (
SELECT country_region
, SUM(`_11_16_21`) as cases
FROM `covid.confirmed_cases`
WHERE country_region = 'China'
GROUP BY country_region
) as c
ON c.country_region = d.country_regionhttps://stackoverflow.com/questions/70148489
复制相似问题