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.00
或cast(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 最小时间差