Si encuentras alguna parte que no comprendes puedes dejarlo en la sección de comentarios y trataremos de ayudarte rápidamente.
Solución:
Si bien la respuesta de @ Heximal funciona, personalmente no la recomiendo.
Esto se debe a que utiliza implícito fundición. Aunque no escribiste CAST
ya sea el SUM()
o el 0.0
deben ser emitidos para ser los mismos tipos de datos, antes de que el +
puede pasar. En este caso el orden de precedencia es a tu favor, y obtienes un flotador en ambos lados, y un flotador como resultado del +
. Pero SUM(aFloatField) + 0
no produce un INT, porque el 0
está siendo implícitamente lanzado a un FLOTADOR.
Encuentro que en la mayoría de los casos de programación, es mucho mejor ser explícito. No deje las cosas al azar, la confusión o la interpretación.
Si quieres ser explícito, usaría lo siguiente.
CAST(SUM(sl.parts) AS FLOAT) * cp.price
No discutiré si NUMERIC o FLOAT (punto fijo, en lugar de punto flotante) es más apropiado, cuando se trata de errores de redondeo, etc. Te dejaré buscarlo en Google si lo necesitas, pero FLOAT se usa tan mal que ya hay mucho que leer sobre el tema.
Puedes intentar lo siguiente a ver qué pasa…
CAST(SUM(sl.parts) AS NUMERIC(10,4)) * CAST(cp.price AS NUMERIC(10,4))
En Oracle db hay un truco para convertir int en float (supongo que también debería funcionar en mysql):
select myintfield + 0.0 as myfloatfield from mytable
valoraciones y reseñas
Si piensas que ha sido de ayuda nuestro post, sería de mucha ayuda si lo compartes con más juniors de esta manera nos ayudas a dar difusión a nuestra información.