【问题标题】:Query including the sum of one row in all rows查询包括所有行中某一行的总和
【发布时间】:2018-06-13 14:12:44
【问题描述】:

我正在尝试将我的一列的总和添加到一列中,然后在我的所有行中显示它。具体来说,我有一个表格,其中每一行都是一个国家,并且有一列用一个地区来标识它们。第三列是一个度量。我正在尝试做的是将来自同一地区的措施相加,然后将它们展示给不同的国家。

这是我目前的查询:

SELECT country, region, SUM(share) AS value_sum FROM data_xlsx_Hoja2 GROUP BY region

我知道 group by 使其仅按地区显示,但是这些值是由总和产生的值,我想放在每个国家/地区旁边。现在我得到的是一张表格,其中包括每个地区的第一个国家,然后是总和。

有什么想法吗?

【问题讨论】:

  • SELECT country, region, SUM(share) AS value_sum FROM data_xlsx_Hoja2 GROUP BY region, country 应该可以工作。
  • 编辑问题添加一些示例数据和所需的结果会有所帮助。
  • 它不会,如果我同时按地区和国家分组,我得到的总和是不正确的,因为它按地区和国家求和,我只想要按地区的总和,但我需要它在一个区域内的每个国家重复出现。
  • 当您使用任何聚合函数(如 SUM 或 COUNT)时,您必须包含您在 GROUP BY 子句中选择的每个非聚合字段。

标签: mysql sql


【解决方案1】:

我想您的country 信息比region 信息更具体。

因此,您可以编写一个主查询来返回两个信息,countryregion,并编写一个子查询来返回同一地区所有国家/地区的总和。

试试这个:

SELECT main.country, main.region,
    (SELECT SUM(sec.share)
    FROM data_xlsx_Hoja2 sec WHERE sec.region = main.region) as total
FROM data_xlsx_Hoja2 main

【讨论】:

    【解决方案2】:

    你似乎想要相关性 subquery

    SELECT country, region, 
           (SELECT SUM(d1.share) 
            FROM data_xlsx_Hoja2 d1
            WHERE d1.region = d.region
           ) AS value_sum 
    FROM data_xlsx_Hoja2 d;
    

    【讨论】:

    • 通过 SELECT 列表字段的子集添加到组中不正确。 mysql 无法识别此错误。我建议您删除 GROUP BY 子句(或也添加国家/地区)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2015-10-23
    • 2021-12-27
    • 2015-10-22
    相关资源
    最近更新 更多