根据现有列中的值创建2列

时间:2017-01-25 00:39:29

标签: mysql

我有下表。我想添加2个带有select查询的新列,该查询将根据标志类型显示总数。

表:

tt        | company     | count  | flag
  --------------------------------------------
  123     | adeco       | 5      | 1
  123     | mic         | 4      | 2 
  333     | manpower    | 88     | 2
  444     | linar       | 2      | 2
  555     | dlank       | 3      | 1

所需:

tt        | company     | total  | flag  | total_flag1 | total_flag2
  -------------------------------------------------------------------
  123     | adeco       | 5      | 1     | 5           | 0
  123     | mic         | 4      | 2     | 0           | 4 
  333     | manpower    | 88     | 2     | 0           | 88
  444     | linar       | 2      | 2     | 0           | 2
  555     | dlank       | 3      | 1     | 3           | 0

2 个答案:

答案 0 :(得分:2)

根据您想要的结果,您应该使用case whenif语法来实现此目的:

select 
    yourtable.*,
    case when flag = 1 then `count` else 0 end as total_flag1,
    case when flag = 2 then `count` else 0 end as total_flag2
from yourtable

或者

select 
    yourtable.*,
    if(flag = 1, `count`, 0) as total_flag1,
    if(flag = 2, `count`, 0) as total_flag2
from yourtable

答案 1 :(得分:0)

我认为您可以使用相关子查询或join

来执行您想要的操作
select t.*, tsum.total_flag1, tsum.total_flag2
from t join
     (select t.tt,
             sum(case when flag = 1 then total else 0 end) as total_flag1,
             sum(case when flag = 2 then total else 0 end) as total_flag2
      from t
      group by t.tt
     ) tsum
     on t.tt = tsum.tt;