Sql 眩晕的频率分布中位数
我有一个vertica表,其中包含如下数据Sql 眩晕的频率分布中位数,sql,vertica,Sql,Vertica,我有一个vertica表,其中包含如下数据 num_emails num_users 1 1000 10 100 25 50 其中,1000表示1000名用户收到1封电子邮件。 该分布的中位数为1 在SQL/Vertica中实现这一点的最佳方法是什么? 我查看了,但它似乎只在列重复n次时有效,而不是一行重复n次。您可以使用累积和和算术: select avg(num_emails) from (select t.*, sum(num_u
num_emails num_users
1 1000
10 100
25 50
其中,1000表示1000名用户收到1封电子邮件。
该分布的中位数为1
在SQL/Vertica中实现这一点的最佳方法是什么?
我查看了,但它似乎只在列重复n次时有效,而不是一行重复n次。您可以使用累积和和算术:
select avg(num_emails)
from (select t.*, sum(num_users) over (order by num_emails) as running_num_users,
sum(num_users) over () as total_num_users
from t
) t
where (running_num_users - num_users) * 2 <= total_num_users and
running_num_users * 2 >= total_num_users;
这里的逻辑是得到运行总数为总计数一半的点。平均值是因为一些特殊情况,我认为两个记录可以满足条件-如果用户数为偶数,且中位数介于两组之间。我肯定这不是最终答案-我认为您提供的样本数据不正确。我尝试了两种可能的中值表达式,但它们并没有真正揭示很多信息:
WITH input(num_emails,num_users) AS (
SELECT 1,1000
UNION ALL SELECT 10,100
UNION ALL SELECT 25,50
)
SELECT
*
, MEDIAN(num_users) OVER() AS median_users
, MEDIAN(num_emails) OVER() AS median_emails
FROM input;
num_emails|num_users|median_users|median_emails
1| 1,000| 100| 10
10| 100| 100| 10
25| 50| 100| 10
你能提供我们可以使用的数据吗
理智的马可预期的产量是多少?我假设您正在查看的数据是聚合的。只需使用原始表格中的行来计算中位数。忘记这一行-花了一段时间来理解您的目标-我认为Gordon Linoff的是您应该查看的。。。