【问题标题】:Complex Float calculations from different tables来自不同表的复杂浮点计算
【发布时间】:2014-11-10 07:52:58
【问题描述】:
Machine1 | Machine2 | Machine3 | Shift |
   abc   |    pqr   |  xyz     |First  |

Machine |SetupTime |OpnTime |
  abc   |   80     |   30   |
  pqr   |   60     |   40   |
  xyz   |   40     |   50   |

Shift | Time |
First |  440 |

我希望所有机器的 OpnTime 总和除以 shift Time 减去 将 setupTime 添加为

((OpnTime+Opntime+OpnTime)/Time-(SetupTime+SetupTime+SetupTime))*100

((30+40+50)/440-(80+60+40))*100

(120/440-180)*100

(120/260)*100

(0.46)*100

46%

你能帮我解决这个复杂的计算吗

【问题讨论】:

  • 除非您的问题与mysqlsql-server-2008 产品有关,否则您的问题标签太多。
  • 抱歉,我不明白我们在这里看到的内容。一张四列的表(machine1/2/3,shift)?而且它总是只包含一条记录?一张桌子,每台机器总是有一条记录,持有两次?第三张表,每个班次有一条记录,保存班次时间?是吗?
  • 是的。我只需要一个查询来获得我已经展示的计算结果,它得到了 46% 的输出。

标签: mysql sql sql-server-2008


【解决方案1】:

你可以试试这个:-

SELECT (SUM(TAB2.OpnTime) / (TAB3.Time - (SUM(TAB2.SetupTime))) * 100
FROM TAB2, TAB3;

这可能会对你有所帮助。

【讨论】:

    【解决方案2】:

    正如你所说,我在 cmets 部分的所有假设都是正确的,这是一个解决方案:

    select 
      (m1.opntime + m2.opntime + m3.opntime) / 
      (s.time - m1.setuptime - m2.setuptime - m3.setuptime) * 100
    from t
    join m1 on m1.machine = t.machine1
    join m2 on m2.machine = t.machine2
    join m3 on m3.machine = t.machine3
    join s on s.shift = t.shift;
    

    这只是正确设置括号的问题。由于 t 中只有一条记录,m 中每台机器只有一条记录,s 中每个班次只有一条记录,因此这是最简单快速的方法。例如,不需要聚合。 (鉴于此,我想知道您的实际问题是什么。看起来很容易。您在哪里失败了?)

    编辑:如果您的列不是小数,而是整数,那么您必须转换为小数。在整数数学中 120 / 260 为 0。在十进制数学中 120 / 260 为 0.4615...

    select 
      cast(m1.opntime + m2.opntime + m3.opntime as decimal) / 
      cast(s.time - m1.setuptime - m2.setuptime - m3.setuptime as decimal) * 100
    from t
    join m1 on m1.machine = t.machine1
    join m2 on m2.machine = t.machine2
    join m3 on m3.machine = t.machine3
    join s on s.shift = t.shift;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-31
      • 2013-01-31
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      相关资源
      最近更新 更多