我有一个已导入 MySQL 的电子表格。它有很多行条目,包括赌博赔率,即 2/1 或 7/2。不幸的是,赌博赔率被 MySQL 读取为 varchar,这使得无法对其进行计算。有人建议我创建一个查找表,其中可以将赌博赔率转换为十进制值。这是有道理的。好的,所以最大的问题是我该怎么做?我是否应该创建一个单独的表来列出赌博赔率并将其等同于其十进制等值,如果是这样,我将如何进行查询,例如从表 1 中找到赔率为 2/1 的所有行,并将其乘以 £1 . 请问有什么建议吗?
3 回答
I think a lookup table is too hard to maintain, since there are an infinite number of possible odds combinations.
Instead, I would strongly suggest that you create a view over your base table, that has the various fields that contain the odds:
create view v_table as
select t.*,
OddsTop*1.0/OddsBottom as OddsNumeric,
OddsBottom*1.0/(OddsTop + OddsBottom) as OddsPvalue
from (select t.*,
cast(left(t.odds, locate('/', t.odds, '/')-1) as int) as OddsTop,
cast(substring(t.odds, locate('/', t.odds)+1, 100) as int) as OddsBottom,
from t
) t
You can easily calculate various types of information related to the odds. Here, I've shown how to get the top number, bottom number, odds as a floating point number, and the p-value equivalent.
据我所知,MySQL 中没有它的数据类型。我建议不要按照您的建议创建单独的表格。如果精度不是最重要的,您可以将它们存储为具有特定宽度的小数并使用十进制值进行查询。您始终可以将其转换回应用层中的分数表示。如果简单很重要,您可以将它们存储为 varchar。有关相关问题,请参见此处。
这实际上是一个非常有趣的问题。我的两位建议“7/2”实际上并未用作数字,因此可以解释为“代码”,就像使用国家代码而不是整个国家名称一样。我可能倾向于使用查找表,将 Odds 用作键,将乘法因子用作每行中的列以用于数学。您还可以控制要使用的精度,以及非常轻松地查询高赔率和低赔率。
不一定说我就在这里,只是觉得这是一个有趣的。