【问题标题】:minimum between columns in mysql with least(), give unpredicted resultmysql 中列之间的最小值与 minimum(),给出不可预测的结果
【发布时间】:2014-07-16 11:39:27
【问题描述】:

在视图语句中,我尝试添加一个列,它给出了 user_value 和friend_value 列之间的最小值。该查询没有给出错误,并为我提供了 90% 行的所需结果。有时我会找到一行,例如 user_value 35 和fried_value 119,然后是 relation_value 119,而这应该是 35....

SELECT User, friend,  user_value, friend_value,  Least(user_value,friend_value) as relation_value



+----+------+--------+------------+--------------+----------------+
|  1 | User | friend | user_value | friend_value | relation_value |
|  2 | 1    | 2      | 35         | 50           | 35             |
|  3 | 1    | 4      | 35         | 20,5         | 20,5           |
|  4 | 1    | 29     | 10         | 15           | 10             |
|  5 | 1    | 30     | 35         | 37,5         | 35             |
|  6 | 1    | 31     | 35         | 40           | 35             |
|  7 | 1    | 32     | 35         | 10           | 10             |
|  8 | 1    | 33     | 35         | 16,66666666  | 16,66666666    |
|  9 | 1    | 34     | 35         | 119          | 119            |
| 10 | 1    | 35     | 35         | 8            | 35             |
| 11 | 1    | 36     | 35         | 120          | 120            |
+----+------+--------+------------+--------------+----------------+

我希望有人能告诉我在哪里可以找到这个问题的根源......

【问题讨论】:

    标签: mysql minimum


    【解决方案1】:

    当我盯着你的结果时,除了“不确定”行问题之外,还有另一种可能性。这种可能性是您的查询正在运行,但值存储为字符而不是数字。这将解释结果。您可以通过将值转换为数字来解决此问题。这是一个简单的方法:

    SELECT User, friend,  user_value, friend_value,
           Least(user_value + 0, friend_value + 0) as relation_value
    

    请注意,如果该值包含不以数字开头的字符串,则其值为0

    故事的寓意:如果要存储数字,请使用数字数据类型,而不是字符串。

    【讨论】:

    • 这可以解决问题,谢谢!但是,这些值四舍五入到小数点后 0,我可以将它们四舍五入吗?我想我必须找到一种方法让视图将值处理为双精度值。
    • @Floria 。 . .尝试+ 0.00cast(user_value as decimal(10, 2)) 将它们保留到小数点后两位。
    • 我试过 + 0.00 但没有任何效果。我尝试使用 cast(user_value as decimal(10, 2)),但我似乎做得不对。我在哪里放置演员表?直接与select一致?像 cast(da1.value as decimal(10, 2)) as User_value
    • 谢谢!它适用于 Cast(da1.value as decimal(10, 2)) as user_value :)
    • 抱歉,还有一个问题。为什么 16,666667 现在显示为 16.00 而不是 16,67?有什么建议?谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2019-06-07
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多