2013-02-05 51 views
0

是否有一種方法可以將列與預定義的數字相乘並基於另一列?根據列中的值使用多個預定義數字。如何根據列值做特定的MySQL計算?

實施例:

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的解決方案。

+0

這些是乘數還存儲在數據庫中? – Strawberry

+0

[你有什麼嘗試?](http://whathaveyoutried.com/) – Jeff

回答

4

當然,你可以使用CASE

SELECT Persons_Id, Activity, Scale, 
    Scale * 
    CASE 
     WHEN Activity = 'swimming' THEN 6 
     WHEN Activity = 'baseball' THEN 8 
     WHEN Activity = 'basketball' THEN 5 
     ELSE 1 
    END Total 
FROM YourTable 

好運。

+1

+1雖然在你的例子中,「CASE Activity WHEN'swimming'THEN 6 ..」會更整齊 – Cez

+0

偉大的觀點,謝謝@Cez :) – sgeddes

+0

這正是我所期待的。謝謝你們。 – dai

0

有另一個名爲WEIGHT的列將SCALE值倍數。也許你可以使用觸發器來計算產品來填充列。否則,一個簡單的SELECT將會很好。

+0

重量是基於用戶的偏好,所以我寧願避免一個額外的列。不過謝謝你的建議。 – dai

0

您可以使用此查詢:

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 

但更好的解決方案將是定義一個新的表數(活性係數)

,這樣就可以插入行: 「游泳」,6 '棒球',8 '籃球',5

然後使用這樣的事情:

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

您還可以使用存儲的值的表或創建一個子查詢將返回乘數:

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 

SQL Fiddle with Demo

結果是:

| 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 |