为什么这不起作用?我想得到结果:
(@sum_hours * @rate_hours) + (@sum_travel * @rate_travel) + (@sum_miles * @rate_miles)
我的子查询结果如下:
@sum_hours = 5.00000, @sum_travel = 2.00000, @sum_miles = 0.00000
@rate_hours = 35.00000, @rate_travel = 35.00000, @rate_miles = NULL
@_rate_hours = CAST(IF(@rate_hours, @rate_hours, 0) AS DECIMAL(10, 5)) = 35.00000
@_rate_travel = CAST(IF(@rate_travel, @rate_travel, 0) AS DECIMAL(10, 5)) = 35.00000
@_rate_miles = CAST(IF(@rate_miles, @rate_miles, 0) AS DECIMAL(10, 5)) = 0.00000
所以现在我有一些价值观,我正在做:
@total:= (@sum_hours * @_rate_hours)
我希望它为175,但它返回NULL。如果我直接宣布@sum_hours为5
@sum_hours:= 5
我按预期得到175分。难道我做错了什么?假如我不知道这些值应该是5,35和175,我怎么能让它返回175?
@sum_hours正在被转换为十进制,但是无论是否使用强制转换,它都不起作用。
编辑:
这是查询的剥离版本,因为JOIN和子查询不相关,只是返回详细信息。所有数字字段都作为FLOAT存储在数据库中。值在结果中得到确认,但@total的计算不起作用(返回null)。
我使用COALESCE和其他一些方法解决了这个问题,但我仍然很好奇它为什么不能正确计算 - 或者我做错了什么。
SELECT
@sum_hours:= CAST(hours AS DECIMAL(10, 5)),
@sum_travel:= CAST(travel AS DECIMAL(10, 5)),
@sum_miles:= CAST(miles AS DECIMAL(10, 5)),
@rate_hours:= (SELECT ... returns 35),
@rate_travel:= (SELECT ... returns 35),
@rate_miles:= (SELECT ... returns NULL),
@_rate_hours = CAST(IF(@rate_hours, @rate_hours, 0) AS DECIMAL(10, 5)),
@_rate_travel = CAST(IF(@rate_travel, @rate_travel, 0) AS DECIMAL(10, 5)),
@_rate_miles = CAST(IF(@rate_miles, @rate_miles, 0) AS DECIMAL(10, 5)),
@total:= (@sum_hours * @_rate_hours) + (@sum_travel * @_rate_travel) + (@sum_miles * @_rate_miles)
FROM table
WHERE
id = '...'
GROUP BY id