首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL总计问题中的求和和分组

SQL总计问题中的求和和分组
EN

Stack Overflow用户
提问于 2021-11-28 23:55:47
回答 1查看 78关注 0票数 1

我正在使用两个不同的covid数据集,其中包括来自所有国家的报告数据。我遇到的问题是sumgroup by函数,其中SQL正在对所有不必要地增加输出的分组行进行求和。举下面的例子,死亡总数应为4,849人,总数为17,441人。

*注:数据集包括每个国家的城市/省,下文已按国家分组

代码语言:javascript
复制
CREATE TABLE covid.deaths(
    country varchar(255),
    deaths int
);


CREATE TABLE covid.confirmed_cases(
    country varchar(255),
    cases int
);
代码语言:javascript
复制
    *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)。

代码语言:javascript
复制
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 函数删除输出

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-29 00:10:04

在加入贪得无厌的死亡病例之前,将它们分开计算。

代码语言:javascript
复制
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_region
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70148489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档