Grails HQL查询将数字舍入
我已经构建了一个grails应用程序,正在控制器中使用HQL使用g-select标记将参数传递给index.gsp。我面临一个非常简单的问题,当值到达前端浏览器/客户端时,数字被舍入 我以前在控制器中使用SQL时没有遇到过这种情况,但现在因为我的index.gsp和控制器使用params和g select进行通信,所以必须使用HQL,这就对所有数字进行了取整,包括基本指标、计算指标等 查询示例控制器: 在这个查询中,我从我的后端表中获取收入,它是YoY和WoW,甚至这个值也被四舍五入到可视化中显示的所有值中Grails HQL查询将数字舍入,grails,groovy,hql,Grails,Groovy,Hql,我已经构建了一个grails应用程序,正在控制器中使用HQL使用g-select标记将参数传递给index.gsp。我面临一个非常简单的问题,当值到达前端浏览器/客户端时,数字被舍入 我以前在控制器中使用SQL时没有遇到过这种情况,但现在因为我的index.gsp和控制器使用params和g select进行通信,所以必须使用HQL,这就对所有数字进行了取整,包括基本指标、计算指标等 查询示例控制器: 在这个查询中,我从我的后端表中获取收入,它是YoY和WoW,甚至这个值也被四舍五入到可视化中显
def com = Com.executeQuery("
SELECT p.date_hour
,p.total_revenue
,CASE
WHEN total_revenue_ly IN (
0
,NULL
)
THEN 0
ELSE ((total_revenue / total_revenue_ly - 1) * 100)
END AS yoy
,CASE
WHEN total_revenue_lw IN (
0
,NULL
)
THEN 0
ELSE ((total_revenue / total_revenue_lw - 1) * 100)
END AS wow
FROM Com p
WHERE p.department = ?
AND p.device = ?
AND p.browser = ?
AND p.platform = ?
AND p.mv = ?
AND p.time_period = ?
ORDER BY col_0_0_ ASC",
[params.department, params.device, params.browser,
params.platform, params.mv, params.time_period])
render com as JSON
我还必须编写转换率等计算指标的查询:
def com = Tablev1.executeQuery("
SELECT p.date_hour
,CASE
WHEN visits IN ((0,NULL)
THEN 0
ELSE ((p.orders / p.visits) * 100)
END AS metric
,CASE
WHEN visits IN ((0,NULL)
THEN 0
WHEN orders_ly IN ((0,NULL)
THEN 0
WHEN visits_ly IN ((0,NULL)
THEN 0
ELSE ((((orders / visits) / (orders_ly / visits_ly)) - 1) * 100)
END AS yoy
,CASE
WHEN visits IN ((0,NULL)
THEN 0
WHEN orders_lw IN ((0,NULL)
THEN 0
WHEN visits_lw IN ((0,NULL)
THEN 0
ELSE ((((orders / visits) / (orders_lw / visits_lw)) - 1) * 100)
END AS wow
FROM Tablev1 p
WHERE p.platform = ?
AND p.mv = ?
AND p.time_period = ?
ORDER BY col_0_0_ ASC",
[params.platform, params.mv, params.time_period])
render com as JSON
甚至这些值也被舍入。我在浏览器的控制台中显示值,在数组中只显示四舍五入的值,我的可视化是使用highcharts.js的图形,但我认为highcharts.js没有问题,因为反馈给highcharts的数组只四舍五入。
第一个查询中的收入数据类型也是float,但仍然是四舍五入的。
问题在于HQL或索引控制器通信
在另一个应用程序中,当数字四舍五入时使用case,而当显示小数时不使用case,我不理解这一点。有人能解释一下吗
我如何解决这个问题?
欢迎提出任何方法/建议
更新:
忽略整个情况,这样的简单查询也传递舍入值
def com = Com.executeQuery("
SELECT p.date_hour
,p.total_revenue
FROM Com p
WHERE p.department = ?
AND p.device = ?
AND p.browser = ?
AND p.platform = ?
AND p.mv = ?
AND p.time_period = ?
ORDER BY col_0_0_ ASC",
[params.department, params.device, params.browser,
params.platform, params.mv, params.time_period])
render com as JSON
尝试在相乘时使用浮点值:
... ELSE ((total_revenue / total_revenue_ly - 1) * 100.0)
您是否有一个在不使用CASE时可以正常工作的示例查询?我不确定我是否正确理解了这个问题。@tax,请检查更新的答案。控制器正在传递舍入值,即使它的数据类型是float,并且后端的值是decimal!我是否可以在grails中的调试中打印控制器控制台中选择的值?已尝试,不起作用。我尝试了一个简单的指标:total_revenue*1.00,以及您提供的相同示例,两者都不起作用。还有其他的解决方法吗?嘿,它适用于度量,但无论我们在哪里使用case-when,它都不起作用。你能告诉我case-when语句的另一种方式吗?你的例子并没有说明这一点,这就是我为什么要问的原因。不带case语句的查询不包括将浮点值和整数值相乘的计算。