2017-05-05 37 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

是不是你計算的相同已經在做? –