我有一张桌子:
_________________________________
| Student | Competitions | Wins |
_________________________________
| Johnny | 8 | 4 |
| Michael | 9 | 4 |
| Ariel | 5 | 3 |
| Raphael | 5 | 1 |
我想创建一个新表,添加一个包含每个学生的胜率的新列。像这样:
__________________________________________
| Student | Competitions | Wins | Win Pct |
__________________________________________
| Johnny | 8 | 4 | .5 |
| Michael | 9 | 4 | .44 |
| Ariel | 5 | 3 | .6 |
| Raphael | 5 | 1 | .2 |
有没有办法做到这一点 - 即通过将一列中的值除以另一列中的值来创建新列?
答案 0 :(得分:2)
如何在SELECT子句中添加一个表达式作为另一个字段,如下所示:
SELECT Student, Competitions, Wins, Wins / Competitions
FROM tablename
答案 1 :(得分:0)
从概念上讲,你所做的事情很糟糕。数据库应存储基本信息 - 此处包括学生,比赛和胜利等数据。另一方面,胜利百分比可以根据其他数据而改变。它来自竞赛和胜利,所以应该在每次需要时计算。当然,对于特别复杂的派生列,性能考虑因素,但在您的情况下这不应该是一个问题。
对于一个粗略的比喻,考虑为什么在数据库中存储用户的年龄是一个糟糕的设计决定,当你已经有他们的出生日期。
答案 2 :(得分:0)
我将同意其他答案,这是一个糟糕的设计实践,因为你正在存储基本的计算数据。
那就是说..这个查询应该为你做(假设你已经创建了这个列)
update tablename set WinPct = (coalesce(Wins,0)/Competitions) where Competitions IS NOT NULL
这应该干净地支持空值(NULL竞争=> Null WinPct)。
每次更新Wins或Comps时,您必须设置触发器(或使用应用程序逻辑)来重新填充此字段,但我会跳过它的那一部分。这是存储这个是个坏主意的另一个原因。
答案 3 :(得分:0)
mti2935是对的,唯一的变化是添加'* 1.0'这会将int转换为float
选择学生,比赛,胜利,胜利* 1.0 /比赛 FROM tablename