2017-08-16 101 views
-1

家伙,我有这样的事情:CASE WHEN,选择MYSQL

select t1.milestone_id, sum(t2.value)/count(t2.value) as value2, value3 
from (
      SELECT milestone_id, SUM(value) value , CASE WHEN (status !='done') THEN (value ='0') ELSE value END as value3 
      FROM project_has_tasks 
      WHERE project_id='52' and milestone_id !=0 
      GROUP BY milestone_id 
     ) t1 
join (
      SELECT milestone_id, SUM(value) value 
      FROM project_has_tasks 
      WHERE project_id='52' and milestone_id !=0 
      GROUP BY milestone_id 
     ) t2 
on  t1.milestone_id >= t2.milestone_id 
group by t1.milestone_id 
order by t1.milestone_id asc 

得到这个: enter image description here

可以请你帮我弄这些价值3为values2除了0 这种像这样:

enter image description here

感谢您的任何建议。

回答

0

修改您的第一行:

SELECT t1.milestone_id, sum(t2.value)/count(t2.value) as value2, IF(value3=0, sum(t2.value)/count(t2.value), value3) as value3 

IF语句的工作原理如下(see the doc)

IF(<expression>, <expression is true>, <expression is false>) 

如果表达式不为NULL,而不是0它被认为是真实的。

+0

#1054 - 在 '字段列表' 未知列 '值' –

+0

忘记值2计算 – BlobbyBob

+0

如果我将使用: SELECT t1.milestone_id,SUM(t2.value )/ count(t2.value)as value2,IF(value3 = 0,sum(t2.value)/ count(t2.value),value3)as value3 then value3与value2相同 –

0

感谢您的建议。下面的代码工作不错:)

select t1.milestone_id, sum(t2.value)/count(t2.value) as value2, IF(value3 !='0', sum(t2.value)/count(t2.value), value3)as value3 
    from (
       SELECT milestone_id, SUM(value) value , CASE WHEN (status !='done') THEN (value ='0') ELSE value END as value3 
       FROM project_has_tasks 
       WHERE project_id='52' and milestone_id !=0 
       GROUP BY milestone_id 
      ) t1 
    join (
       SELECT milestone_id, SUM(value) value 
       FROM project_has_tasks 
       WHERE project_id='52' and milestone_id !=0 
       GROUP BY milestone_id 
      ) t2 
    on  t1.milestone_id >= t2.milestone_id 
    group by t1.milestone_id 
    order by t1.milestone_id asc