如何创建查找表

时间:2012-05-15 22:51:52

标签: mysql sql

我有一个我导入MySQL的电子表格。它有很多行条目,包括赌博赔率,即2/1或7/2。不幸的是,MySQL的赌博赔率被读作varchar,因此无法对其进行计算。建议我创建一个查找表,其中赌博赔率可以转换为十进制值。这是有道理的。好的,最重要的问题是我该如何解决这个问题?我应该创建一个单独的表来列出赌博赔率并将它们等同于它们的十进制等值,如果是这样,我将如何进行查询,例如,从表1中找到赔率为2/1的所有行,并将其乘以£1 。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我认为查找表太难维护,因为有无数可能的赔率组合。

相反,我强烈建议您在基表上创建一个视图,其中包含包含赔率的各个字段:

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

您可以轻松计算与赔率相关的各种类型的信息。在这里,我已经展示了如何将顶部数字,底部数字,赔率作为浮点数,以及p值等价。

答案 1 :(得分:0)

据我所知,MySQL中没有数据类型。我建议不要按照你的建议创建单独的表格。如果精度不是最重要的,您可以将它们存储为具有特定宽度的小数,并使用小数值进行查询。你总是可以convert it back to its fractional representation in the application layer。如果简单性很重要,您可以将它们存储为varchar。有关相关问题,请参阅here

答案 2 :(得分:0)

这实际上是一个非常有趣的问题。我的两位表示“7/2”实际上并未用作数字,因此可以解释为“代码”,与使用国家/地区代码而不是整个国家/地区名称相同。我可能倾向于使用查找表,使用Odds作为键,并将乘法因子作为每行中的列用于数学。您还可以控制您想要使用多少精度,以及非常容易地查询高赔率和低赔率。

不一定说我就在这里,只是觉得这个很有意思。