【问题标题】:How to calculate the daily cost based on total hours?如何根据总小时数计算每日费用?
【发布时间】:2016-04-07 00:11:31
【问题描述】:

如何使用 SQL 计算成本我想要的是计算单个 CCODE 的成本。在此数据表中,成本属于天 (DayUID) 而不是特定的 CCODE,但我们可以根据 CCODE 的小时数提取特定 CCODE 的成本。数学计算应该就像假设 CCODE=SS1 其中 DayUID=DDD1

  • CCODE = SS1 为 4 小时
  • DDD1 的 CCODE 总持续时间 = 12 小时
  • DayUID = DDD1 成本为 2000

所以 SS1 的成本基本上是这样计算的(4 小时 / 12 小时)* 2000 = 666.67

DayUID | DayCost | PCODE | CCODE | Duration |
---------------------------------------------
DDD1   | 2000    | TS    | SS1   | 3        |
DDD1   | 2000    | TS    | SS1   | 1        |
DDD1   | 2000    | TS    | ST2   | 2        |
DDD1   | 2000    | P     | ST2   | 6        |
DDD2   | 3000    | P     | IH1   | 6.6      |
DDD2   | 3000    | U     | IH1   | 4        |
DDD2   | 3000    | TS    | IH2   | 1        |
DDD3   | 1200    | TU    | SC1   | 7        |
DDD3   | 1200    | P     | SC2   | 8        |
DDD3   | 1200    | U     | CMPLT | 3        |

【问题讨论】:

  • 实际上我不知道它应该如何......我的目标是找到每个 DayUID 中每个不同 CCODE 的成本。例如,DayUID = DDD1 中的 CCODE = SS1 成本为 666.67,DayUID= DDD1 中的 CCODE = ST2 为 1333.33 (8/12)*2000,DayUID=DDD2 中的 CCODE = IH1 为 (10.6/11.6)*3000 等等
  • 12 小时是 DayUID = DDD1 的总小时数 DayUID=DDD2 的总小时数 = 11.6 和 DDD3 的总小时数 = 18 小时。只是在表中加起来
  • 计算目标是每天不同阶段的总小时数除以 DayUID 相同的一天中的总小时数乘以成本

标签: mysql calculated-columns


【解决方案1】:

在子查询中按 DayUID 和 CCODE 获取总时长:

  SELECT a.DayUID, 
         a.CCODE, 
         SUM(a.Duration) / b.Duration * a.DayCost
    FROM Table1 a
    JOIN (SELECT DayUID, 
                SUM(Duration) Duration 
           FROM Table1 
       GROUP BY DayUID) b 
      ON a.DayUID = b.DayUID
GROUP BY DayUID, CCODE;

SQLFiddle

【讨论】:

  • 直截了当完美......天才和无数感谢
  • 严格来说,您应该使用像 min(b.Duration)min(a.Daycost) 这样的虚拟聚合。在大多数其他平台上,此查询不会运行。
  • @shawnt00 您可能是对的,这就是为什么在另一个平台上测试代码无法正常工作的原因......您能否使用您提到的方法提供完整的编码,例如 min(b.duraiton) 等?
  • @rookie_coder 只是最终计算中的两个 min 表达式,而不是裸列名称。这是一个很小的变化。
  • @shawnt00 抱歉,我对这个东西太陌生了,我应该把它放在代码的哪个位置?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多