【问题标题】:How to SUM of rows on Condition in next column using SELECT如何使用 SELECT 对下一列中的条件行求和
【发布时间】:2021-04-27 00:46:33
【问题描述】:

我有一个如下所示的数据集/表结构

|部门|率|员工人数 | |----|----|----------------| |一个 | 8 | 2 | |一个 | 5 | 2 | |乙| 10 | 2 | |乙| 5 | 2 |

期望 SELECT / SQL 的输出是

|部门|率|员工人数 | TotalHoursPerWeek | TotalCostPerWeek |TotalCostPerEmplPerDept | |----|----|----------------|---------------------|- -------------------|------------| |一个 | 8 | 2 | 80 | 640 | 1040 | |一个 | 5 | 2 | 80 | 400 | 1040 | |乙| 10 | 2 | 80 | 800 | 1200 | |乙| 5 | 2 | 80 | 400 | 1200 |

我在SELECT 下方尝试过,但无法根据“部门”和“员工”求和“总成本周”

请注意,以下查询中的 SUM(TotalCostPerWeek 'per' Dept) 更多用于表示目的,因为我知道/理解它在 SQL 中不起作用,因此需要有关如何使用 SELECT 语句获得这种结果的帮助/建议。

SELECT Dept, Rate, NoOfEmployee, 
      (NoOfEmployee * 40) AS TotalHoursPerWeek, 
      (NoOfEmployee *  40* Rate) AS TotalCostPerWeek, 
      SUM(TotalCostPerWeek 'per' Dept) AS TotalCostPerEmplPerDept
 FROM TABLE
 GROUP BY Dept, Rate;

【问题讨论】:

  • 嘿伙计。你的问题有点模糊。您可以添加架构表并澄清您的问题吗?

标签: mysql select sum


【解决方案1】:

我想我了解您的需求,您可以使用“case when”来实现这一点......

Select Dept,
       Rate,
       No_of_employee,
       TotalHoursPerWeek = (No_of_employee * 40),
       TotalCostPerWeek = (No_of_employee * 40 * Rate)
       TotalCostPerEmplPerDep = case when Dept ='A' then (select SUM(No_of_employee * 40 * Rate) from table where Dept = 'A')
                                 else (select SUM(No_of_employee * 40 * Rate) from table where Dept <> 'A')    
from table

【讨论】:

  • What-IF,'Dept' 需要是动态值?我的意思是这张桌子会有很多这样的部门,那么我们如何才能在 WHEN 和 WHERE 中放置一个特定的“部门”。当我们遍历行时,SELECT 应该在“Dept”从一行更改为另一行时动态计算 SUM。
  • 然后尝试 TotalCostPerEmplPerDep = (select SUM(No_of_employee * 40 * Rate) from table t2 where t1.Dept = t2.Dept group by Dept)
【解决方案2】:

你只有 Dept 的聚合功能,而 otherc olumn 不需要聚合 在这种情况下,您应该在子查询上使用连接以获得聚合结果

SELECT Dept, rate, NoOfEmployee, 
      (NoOfEmployee * 40) AS TotalHoursPerWeek, 
      (NoOfEmployee *  40 * Rate) AS TotalCostPerWeek
from TABLE 
INNER JOIN (
    SELECT Dep,  SUM(ToOfEmployee *  40 * Rate) AS TotalCostPerEmplPerDept
    FROM TABLE
    GROUP BY Dept
) t on t.Dept = TABLE.Dept

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多