mysql根据几个结果进行计算

时间:2011-12-12 18:11:50

标签: mysql sum

我有一个包含字段ID,操作和值的表。 ID是记录名称,action是值表示的标识符。表中的ID值与不同的操作和值重复。

示例:

ID      action      value
3603    1           78
3603    2           2
3603    3           1
5645    1           45
etc...

现在我想构建一个select语句,它会以某种方式得到ID = 3603且公式为的值(如果action 1则值* 10,如果action 2则值为* 5,如果action 3则值为* 2) 。 3603的结果是792。

最重要的是,我需要将它连接到另一个表,我有相同的ID值(唯一),我需要按这个总和两个表排序...

这可能或者我应该为每条记录做一些累积表来保存这笔金额吗?问题是这是统计计算,因此每个ID将获得每月和每年的3个操作输入(每月统计数据)。

4 个答案:

答案 0 :(得分:1)

 select sum(
 case 
 when action = 1 then value * 10
 when action = 2 then value * 5
 when action = 3 then value * 2
 end) as total
 from table
 where id = 3603 

答案 1 :(得分:1)

select sum(CASE t.action WHEN  1 then t.value * 10 when 2 then value*5 when 3 then value*2 end) from table t
group by t.id

上面的选择将根据id的

计算给定表的总和

答案 2 :(得分:1)

这是一种可能的方式,有多个表和一个订单。它应该相当有效,每月只有3个值。

select table_with_fields.ID, 
   table_2.field_1,
   table_2.field_2,
   sum(
      CASE action 
         when 1 then value * 10
         when 2 then value * 5
         when 3 then value * 2
       END) as full_amount
from table_with_fields 
   join table_2 on table_with_fields.id = table_2.id
group by table_with_fields.ID, 
   table_2.field_1,
   table_2.field_2
order by full_amount

答案 3 :(得分:1)

select id,action,sum(
CASE t.action 
  WHEN 1 then t.value * 10 
  when 2 then value*5 
  when 3 then value*2 end
) AS S

from table_multy t join table_single s on t.id=s.id
group by t.id
order by ( sum(
CASE t.action 
  WHEN 1 then t.value * 10 
  when 2 then value*5 
  when 3 then value*2 end
) + s.other_val )

保存在历史表中使用:

insert into thistory (col1,clo2,clon) select ....