Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 眩晕的频率分布中位数_Sql_Vertica - Fatal编程技术网

Sql 眩晕的频率分布中位数

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

我有一个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_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的是您应该查看的。。。