Хотя ответ @ Heximal работает, я лично не рекомендую его.
Это потому, что он использует неявное приведение.Хотя вы не набрали CAST
, либо SUM()
, либо 0.0
необходимо привести к тем же типам данных, прежде чем +
может произойти.В этом случае порядок старшинства в вашу пользу, и вы получаете плавающее число с обеих сторон и плавающее число в результате +
.Но SUM(aFloatField) + 0
не дает INT, потому что 0
подразумевается неявно приведение к FLOAT.
Я считаю, что в большинстве случаев программирования гораздо предпочтительнее быть явно .Не оставляйте вещи на волю случая, путаницы или толкования.
Если вы хотите быть явным, я бы использовал следующее.
CAST(SUM(sl.parts) AS FLOAT) * cp.price
Я не буду обсуждать, является ли NUMERIC или FLOAT (фиксированная точка вместо плавающей запятой) более подходящим, когда речь идет об ошибках маршрутизации и т. Д. Я просто позволю вам Google, если вам нужно,но FLOAT настолько широко используется неправильно, что о нем уже есть что почитать.
Вы можете попробовать следующее, чтобы увидеть, что происходит ...
CAST(SUM(sl.parts) AS NUMERIC(10,4)) * CAST(cp.price AS NUMERIC(10,4))