2017-05-05 50 views
1

你能帮助我通过选择一个速度算到我的SQL:根据本 速度:计数公式 - 速度

enter image description here

我的数据库看起来如下:

enter image description here

MySQL选择外观如下:

$sql = "SELECT SUM(value) FROM project_has_tasks WHERE project_id='10' GROUP BY milestone_id ASC"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "" . $row["SUM(value)"]. ","; 
    } 
} 
$conn->close(); 

为PROJECT_ID = '10' 的结果看起来像这样:

50,20,15

确定。这是简单的,但没有任何不可能性使用上面的速度公式在MySQL中选择要不somwhere 所以结果以公式(PHP):

enter image description here

是否应是这样的:

50,35,28.3

任何帮助?

+0

为什么你没有在你得到结果后在PHP中计算它? –

回答

2

由于MySQL不支持CTE,因此您可以分两步为其构建查询。首先,你得到values的总和每个milestone,有像你已经写了

SELECT milestone_id, SUM(value) 
FROM project_has_tasks 
WHERE project_id='10' 
GROUP BY milestone_id 

的一个查询然后你加入上面本身

select t1.milestone_id, sum(t2.val)/count(t2.val) 
from (
      SELECT milestone_id, SUM(value) val 
      FROM project_has_tasks 
      WHERE project_id='10' 
      GROUP BY milestone_id 
     ) t1 
join (
      SELECT milestone_id, SUM(value) val 
      FROM project_has_tasks 
      WHERE project_id='10' 
      GROUP BY milestone_id 
     ) t2 
on  t1.milestone_id <= t2.milestone_id 
group by t1.milestone_id 
order by t1.milestone_id desc 

你可以看到它在行动here查询

+0

神奇,工作正常。非常感谢! –

+0

好的斯特凡诺,还有一件事:有没有可能为每一行排除首位? 例如,我有这些值:1/3/3/5/3所以结果为这些应该通过像:1/2/2.3/3/3 –

+0

是不是你计算的相同已经在做? –