如何根据列值进行特定的MySQL计算?

如何根据列值进行特定的MySQL计算?,mysql,math,Mysql,Math,有没有一种方法可以将一列与基于另一列的预定义数字相乘?根据列中的值,可以使用多个预定义的数字 例如: 桌子 Columns: persons_id,activity,scale 价值观 1,swimming,4 1,baseball,2 1,basketball,3 2,swimming,6 2,basketball,3 如果我预先设定的数字是:6个游泳,8个棒球,5个篮球 输出如下所示 1,swimming,4,24 1,baseball,2,16 1,baske

有没有一种方法可以将一列与基于另一列的预定义数字相乘?根据列中的值,可以使用多个预定义的数字

例如:

桌子

Columns: persons_id,activity,scale 
价值观

1,swimming,4  
1,baseball,2  
1,basketball,3  
2,swimming,6  
2,basketball,3
如果我预先设定的数字是:6个游泳,8个棒球,5个篮球

输出如下所示

1,swimming,4,24  
1,baseball,2,16  
1,basketball,2,10  
2,swimming,6,36  
2,basketball,3,15

编辑:谢谢大家的贡献。我最终使用了sgeddes的解决方案。

还有一个称为权重的列,它乘以刻度值。也许您可以使用触发器来填充列来计算产品。否则,一个简单的选择就可以了。

有另一个称为“权重”的列,它乘以刻度值。也许您可以使用触发器来填充列来计算产品。否则,一个简单的选择就可以了。

当然,您可以使用以下用例:

祝您好运。

当然,您可以使用以下用例:


祝您好运。

您可以使用此查询:

select persons_id, activity, scale, 
 scale * case when activity = 'swimming' then 6
              when activity = 'baseball' then 8
              when activity = 'basketball' then 5 end as result
from Table1
但更好的解决方案是定义一个新的表Coefficientsactivity,coefficient

以便您可以插入行: “游泳”,6 “棒球”,8 “篮球”,5

然后使用类似的方法:

select persons_id, activity, scale, scale * coefficient as result
from Table1 inner join Coefficients on Table1.activity = Coefficients.activity

您可以使用以下查询:

select persons_id, activity, scale, 
 scale * case when activity = 'swimming' then 6
              when activity = 'baseball' then 8
              when activity = 'basketball' then 5 end as result
from Table1
但更好的解决方案是定义一个新的表Coefficientsactivity,coefficient

以便您可以插入行: “游泳”,6 “棒球”,8 “篮球”,5

然后使用类似的方法:

select persons_id, activity, scale, scale * coefficient as result
from Table1 inner join Coefficients on Table1.activity = Coefficients.activity

还可以使用存储值的表或创建将返回乘数的子查询:

select persons_id,
  t.activity,
  scale, 
  scale * s.val  as result
from yourtable t
inner join
(
  select 'swimming' activity, 6 val
  union all
  select 'baseball' activity, 8 val
  union all
  select 'basketball' activity, 5 val
) s
  on t.activity = s.activity

结果是:

| PERSONS_ID |   ACTIVITY | SCALE | RESULT |
--------------------------------------------
|          1 |   swimming |     4 |     24 |
|          1 |   baseball |     2 |     16 |
|          1 | basketball |     3 |     15 |
|          2 |   swimming |     6 |     36 |
|          2 | basketball |     3 |     15 |

还可以使用存储值的表或创建将返回乘数的子查询:

select persons_id,
  t.activity,
  scale, 
  scale * s.val  as result
from yourtable t
inner join
(
  select 'swimming' activity, 6 val
  union all
  select 'baseball' activity, 8 val
  union all
  select 'basketball' activity, 5 val
) s
  on t.activity = s.activity

结果是:

| PERSONS_ID |   ACTIVITY | SCALE | RESULT |
--------------------------------------------
|          1 |   swimming |     4 |     24 |
|          1 |   baseball |     2 |     16 |
|          1 | basketball |     3 |     15 |
|          2 |   swimming |     6 |     36 |
|          2 | basketball |     3 |     15 |

这些乘数是否也存储在数据库中?这些乘数是否也存储在数据库中?+1尽管在您的示例中,“游泳”时的案例活动为6。。这正是我想要的。谢谢你,斯格迪斯。@dai-没问题,很高兴我能。祝你好运。+1尽管,在你的例子中,当“游泳”时的案例活动是6。。这正是我想要的。谢谢你,斯格迪斯。@dai-没问题,很高兴我能。祝你好运。权重取决于用户的偏好,所以我宁愿避免增加一列。不过,谢谢你的建议。权重是基于用户的偏好,所以我宁愿避免增加一列。谢谢你的建议。