gpt4 book ai didi

sql - 在 PostgreSQL 中计算速率

转载 作者:行者123 更新时间:2023-11-29 13:15:14 29 4
gpt4 key购买 nike

尝试做一些非常简单的事情,并通过邮寄计算 signup_flow rate。

我有一个名为 signup_flow 的列 - 每行都有一个整数值 1 或 0。尝试计算每封邮件的 signup_flow 率。

我正在使用以下查询。 SUM(signup_flow)COUNT(signup_flow) 返回每个邮件的正确值。当我尝试做一个简单的计算字段时 (sum/count*100) 它返回 0。这是我第一次使用 Postgres,它不支持计算吗?

  SELECT mailing, SUM(signup_flow), COUNT(signup_flow),   
((SUM(signup_flow)/COUNT(signup_flow))*100) AS rate
FROM mail_2017_analytic_file
GROUP BY mailing;

结果:

mailing             sum      count   rate
DEC 17 RRD Mailing 2535 1085476 0
JAN 17 RRD Mailing 8275 3695017 0
MAR 17 RRD Mailing 7230 3595594 0
MAY 17 RRD Mailing 5616 2672981 0
JULY 17 RRD Mailing 7837 3741944 0
AUG 17 RRD Mailing 9272 4604807 0
OCT 17 RRD Mailing 7982 4996146 0

最佳答案

改用这个表达式:

    SUM(signup_flow) * 100.0 / COUNT(signup_flow) AS rate

@Richard suggested ,您的问题是整数除法,其中截断了小数位。手册:

/ ... division (integer division truncates the result)

当您得到的只是小数时,这会破坏乐趣。

在除法之前乘以 100 仅当它使 rate 达到 1 或更大时才“有帮助”。 (它仍然是整数除法。)乘以 100.0 就可以了,因为带有小数位的数字常量被假定为 numeric 类型,而仅由数字组成(并且足够小)的数字常量被假定为 integer 类型。

或者,将至少一个涉及的数字显式转换为floatnumeric,这会在整个计算中强制使用非整数类型。

您可能想要 round()你的结果到给定的小数位数(适用于 numeric):

    round(SUM(signup_flow) * 100.0 / COUNT(signup_flow), 2) AS rate

相关(有更多解释和链接):

关于sql - 在 PostgreSQL 中计算速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50031806/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com