Tengo una tabla software
y columnas en ella como dev_cost
, sell_cost
. Si dev_cost
es 16000 y sell_cost
7500.
¿Cómo encuentro la cantidad de software que se venderá para recuperar el dev_cost
?
He consultado lo siguiente:
select dev_cost / sell_cost from software ;
Devuelve 2 como respuesta. Pero necesitamos obtener 3, ¿verdad?
¿Cuál sería la consulta para eso? Gracias por adelantado.
sql
postgresql
division
modulo
zeewagon
fuente
fuente
select ceil(16000::numeric/7500)
Respuestas:
Sus columnas tienen tipos enteros y la división entera trunca el resultado hacia cero . Para obtener un resultado preciso, deberá convertir al menos uno de los valores en flotante o decimal :
select cast(dev_cost as decimal) / sell_cost from software ;
o solo:
select dev_cost::decimal / sell_cost from software ;
Luego puede redondear el resultado al número entero más cercano usando la
ceil()
función:select ceil(dev_cost::decimal / sell_cost) from software ;
(Vea la demostración en SQLFiddle ).
fuente
Puede convertir el tipo entero ay
numeric
usar laceil()
función para obtener la salida deseadaSELECT 16000::NUMERIC / 7500 col ,ceil(16000::NUMERIC / 7500)
Resultado:
col ceil ------------------ ---- 2.1333333333333333 3
Entonces tu consulta debería ser
select ceil(dev_cost::numeric/sell_cost) from software
fuente
También puede convertir su variable al tipo deseado, luego aplicar la división:
SELECT (dev_cost::numeric/sell_cost::numeric);
Puede redondear su valor y especificar el número de dígitos después del punto:
SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);
fuente
Esta consulta redondeará el resultado al siguiente entero
select round(dev_cost ::decimal / sell_cost + 0.5)
fuente
dev_cost
resulta ser un múltiplo entero desell_cost
: ver ejemplo .