首页 > 解决方案 > Redshift Avg 不返回小数

问题描述

我不知道如何在平均计算中返回小数。

我有:

select
    r_i_flag,
    mr_age_bucket,
    count(request_id) as sum_requests,
    avg(age_of_mr_days) as avg_age_of_mr_days,
    median(age_of_mr_days) as median_age_of_mr_days
from
    together
group by
    1,
    2
order by
    1 desc,
    2

我尝试将 mr_age_bucket 转换为数字,尝试使用 to_number 将 avg/median 转换为数字,作为小数,但我只是得到四舍五入的数字:

r_i_flag mr_age_bucket sum_requests avg_age_of_mr_days 中位数_年龄_mr_days
零售 <7 天 29 1 1
零售 >7 天 107 46 30
机构 <7 天 1 5 5
机构 >7 天 13 45 29

我觉得这是一件非常愚蠢的事情,但我无法弄清楚。如何返回非四舍五入的数字?谢谢。

标签: sqlamazon-web-servicesamazon-redshift

解决方案


问题是传递给 AVG 的数据类型,只需将其除以 1.0 即可。投射到DOUBLE PRECISIONREAL也将起作用

select
    r_i_flag,
    mr_age_bucket,
    count(request_id) as sum_requests,
    avg(age_of_mr_days / 1.0) as avg_age_of_mr_days,
    avg(age_of_mr_days::double precision),
    avg(age_of_mr_days::real),
    median(age_of_mr_days) as median_age_of_mr_days

from
    together
group by
    1,
    2
order by
    1 desc,
    2

推荐阅读