具有唯一值的列的 SQL 总和量

Posted

技术标签:

【中文标题】具有唯一值的列的 SQL 总和量【英文标题】:SQL Sum amount for column with unique values 【发布时间】:2021-03-05 05:26:50 【问题描述】:

更新

意识到我做得对。我遇到问题的原因是因为我没有意识到我的 Col1 数据并不像预期的那样,有一些 Col1 与多个 Col0 相关联(它应该是 Col1:Col0 1:1 关系。这就是为什么混淆其中一个没有按预期工作。

原始问题

我正在使用 SQL 查询对其中一列中不同值的总收入求和,并返回一个与其他属性组合的表。

这是我的桌子:

Col 0    Col1   Col2(unique)  Revenue
X        1      A             10
X        1      B             20
X        1      C             0
X        2      D             5
X        2      E             8
Y        3      F             3
Y        3      G             0
Y        3      H             50

期望的输出:

Col0   Col1   Revenue
X      1      30
X      2      13
Y      3      53

我试过了:

WITH
  rev_calc AS (
    SELECT
      Col0,
      Col1,
      Col2, ##this is for further steps to combine other tables for mapping after this
      SUM(Revenue) AS total_revenue, ##total rev by Col1
    FROM table_input
    GROUP BY Col1, Col0, Col2 ##Have to group by Col0 and Col2 too as it raised error because of 'list expression'
    )
SELECT DISTINCT 
  table2.mappedOfCol0,
  rev_calc.Col1,
  rev_calc.Col2,
  rev_calc.total_revenue,
FROM another_table AS table2
LEFT JOIN rev_calc
  ON rev_calc.Col0 = table2.mappedOfCol0

但是在特定的 Col1 下获得多行收入的实际输出。

例如,当我在输出表中按 Col1 = 1 过滤时,我仍然得到一个不同收入金额的列表:

Col1   total_revenue
1      10
1      20
1      0

我认为GROUP BY 应该将收入汇总到 Col1 下。我在这里错过了什么?我也尝试先查询FROM (SELECT DISTINCT Col1....) 方式,但总和(收入)也会产生不同收入的列表

这里是 SQL 的新手,如果有人可以在这里分享任何见解,不胜感激。谢谢。

【问题讨论】:

这能回答你的问题吗? Using group by on multiple columns 谢谢哈桑,正如问题中提到的,我试图使用 GROUP BY,但我的问题是即使我使用 GROUP BY 查询,输出仍然给我 Col1 的多个收入金额跨度> @unacom 您想要的输出将由 GMB 答案显示 【参考方案1】:

你不想聚合吗?

select col0, col1, sum(revenue) as revenue
from mytable
group by col0, col1

我不明白您要在查询中使用 col2 做什么。这将为您显示的数据生成您想要的结果,其中包含一个表。

【讨论】:

感谢@GMB!所以我仍然需要 col2 在与另一个组合时使用最终结果。桌子。我需要参考,即了解对于每个 Col0,与其关联的 Col1 和 Col2 的值列表。是的,我想要聚合,但我不明白为什么我的聚合在我的查询中不起作用。如果我的查询中不包含 Col2,则在查询的第二部分组合时,我将无法选择它们以在我的输出表中生成【参考方案2】:

根据您提供的解释,我认为您的要求是根据 Col2 值映射到另一个表的选择性记录的总收入。如果是这种情况,那么您可以尝试以下查询。

WITH
    rev_calc AS (
        SELECT 
            distinct(Col2) as Col2
        From table_input
        LEFT JOIN another_table
            ON another_table.Col2 = table_input.Col2
    )
SELECT
      Col0,
      Col1,
      SUM(Revenue) AS total_revenue 
FROM table_input 
WHERE Col2 in (select Col2 from rev_calc)
GROUP BY Col0, Col1;

【讨论】:

感谢 Nilesh 的建议!我完全遵循并意识到您和 GMB 的方式都有效。我遇到问题的原因是因为我没有意识到我的 Col1 数据并不像预期的那样,有一些 Col1 与多个 Col0 相关联(它应该是 Col1:Col0 1:1 关系。这就是为什么混淆它没有按预期工作。谢谢!

以上是关于具有唯一值的列的 SQL 总和量的主要内容,如果未能解决你的问题,请参考以下文章

用其他表中列的唯一值数填充sql表中的列

SQL中Unique约束有啥用啊?

如何为 Oracle 中的列组合赋予唯一约束?

我需要从 sql 中选择具有不同值的列

在 SQL 中选择具有唯一列值的行

如何堆叠列和唯一值的数据帧?