0
我有一个查询,我将一个四舍五入的总和与一个整数进行比较,我收到意想不到的结果。MySQL:有四舍五入的总和不等于整数
SELECT assignments.*
FROM assignments
INNER JOIN time_entries
ON time_entries.assignment_id = assignments.id
WHERE assignments.organization_id = 2
AND assignments.allocation_mode = 'fixed'
AND (fixed_hours is not null)
HAVING round(sum(time_entries.scheduled_hours)) != round(assignments.fixed_hours);
它返回的20
fixed_hours
分配。该列是一个浮点数。
当我选择该匹配记录的time_entries之和时,我得到20.000000298023224
。当我打电话对round
,我得到20
:
SELECT
round(sum(scheduled_hours))
FROM time_entries
WHERE assignment_id=112869;
而且SELECT round(fixed_hours) from assignments where id=112869
也给20
。
并且当然select round(20.000000298023224) = round(20);
返回1
。
那么,我的查询有什么问题,该记录正在返回?
'轮(assignments.fixed_hours)需要一批'从表中随机选择的行得到这个值。它不太可能会选择一个匹配整个表的总和的行。 – Barmar
最大的问题是'SUM'聚合......没有分组,这将把所有单独的行合并成一行。 MySQL有一个允许查询处理的扩展,而像这样的查询会在其他RDBMS中引发错误。一个快速解决方案(不一定是最正确的解决方案)是添加'GROUP BY foo',其中foo是'assignments'表的主键列,或者禁止这一点,一些表达式在'assignments'表,即没有两行将共享相同的值。 – spencer7593