mysql 中列之间的最小值与 minimum(),给出不可预测的结果

Posted

技术标签:

【中文标题】mysql 中列之间的最小值与 minimum(),给出不可预测的结果【英文标题】:minimum between columns in mysql with least(), give unpredicted result 【发布时间】: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            |
+----+------+--------+------------+--------------+----------------+

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

【问题讨论】:

【参考方案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?有什么建议?谢谢:)

以上是关于mysql 中列之间的最小值与 minimum(),给出不可预测的结果的主要内容,如果未能解决你的问题,请参考以下文章

试图计算最小值与单元格中每个值之间的差异

783. Minimum Distance Between BST Nodes BST节点之间的最小距离

539 Minimum Time Difference 最小时间差

POJ 2516:Minimum Cost(最小费用流)

HDU 1385 Minimum Transport Cost (输出字典序最小路径)最短路

获取 Postgres 中每个值与整体最小值的差异