【问题标题】:SQL: How to SUM the same value on two different criteriaSQL:如何根据两个不同的条件对相同的值求和
【发布时间】:2015-03-02 20:08:08
【问题描述】:

假设我有下表,其中记录了谁投资了公司列表。

Table: corporate_investments

company investor investment date
--------------------------------
CorpA    Alice     10       12/1
CorpB    Bob       20       12/2
CorpB    Sally     20       12/3 
CorpC    Cathy     30       12/4
CorpC    Alice     40       12/5
CorpC    Bob       10       12/6
CorpC    Bob       20       12/7

我将如何运行查询以返回每家公司、Bob(他是 VIP)的总投资以及对该公司的总投资?

我试过了

SELECT company,SUM(investment) as total investment
FROM corporate_investments
GROUP BY company

它成功地找到了投资总额。

company    total_investment
---------------------------
CorpA           10
CorpB           40
CorpC          100

现在我想为每家公司添加 Bob 的总金额。我需要像 SUM() 函数本身的子句这样的东西,但我很困惑如何做到这一点。

【问题讨论】:

    标签: mysql sql database sum


    【解决方案1】:

    使用条件聚合:

    SELECT company, SUM(investment) as total,
           sum(case when investor = 'Bob' then investment else 0 end) as BobTotal
    FROM corporate_investments
    GROUP BY company;
    

    【讨论】:

      【解决方案2】:

      您可以使用WITH ROLLUP 获得每个投资者的滚动总数:

      SELECT company, investor, SUM(investment) AS total
      FROM corporate_investments
      GROUP BY company, investor WITH ROLLUP
      

      这会产生这样的结果:

      CorpA    Alice     10
      CorpA    NULL      10
      CorpB    Bob       20
      CorpB    Sally     20
      CorpB    NULL      40
      CorpC    Alice     40
      CorpC    Bob       30
      CorpC    Cathy     30
      CorpC    NULL     100
      

      【讨论】:

      • 这很有用,但不是我需要的输出。我会保存这个以便以后记住它。
      猜你喜欢
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      相关资源
      最近更新 更多