首页 > 解决方案 > 为什么我不能在 SQL 中创建聚合平均日期差异列

问题描述

我想在 SQL 中为我正在使用的 AB 测试数据集创建平均日期差异列,但无论我使用什么最终都会出现错误消息。

原始数据

我试图聚合表,但它没有用,我对 sql 还是很陌生,所以我很困惑!

SELECT
ab_group,
avg(datediff(install_date, conversion_date) as avg_install_2_purchase,
avg(datediff(assignment_date, conversion_date) as avg_assignment_to_purchase,
avg(count(purchases)/count(assignment_date)
from
table
group by ab_group

输出 我希望输出会像我的图像一样,在提供的数据中,大多数转换都是空的,但我的数据中确实有它们。我不确定为什么代码失败?

标签: sqldategoogle-bigquery

解决方案


为什么我们不使用子查询来使其更易于阅读/理解/调试?我的意思是,是的,它有点冗长,通常不是生产中的最佳选择,但它几乎总是有助于使事情变得明确、轮廓清晰且可读性强:

select 
 ab_group,
 avg_install_to_purchase,
 avg_assignment_to_purchase,
 if(coalesce(assignment_dates, 0) = 0, 0.0, purchases/assignment_dates) as ratio from 
(
   select 
       ab_group, 
       avg(install_to_purchase) as avg_install_to_purchase, 
       avg(assignment_to_purchase) as avg_assignment_to_purchase, 
       count(purchases) as purchases, 
       count(assignment_date) as assignment_dates
   from (
            select 
               ab_group,
               coalesce(abs(datediff(install_date, conversion_date, day)), 0) as install_to_purchase,
               coalesce(abs(datediff(assignment_date, conversion_date, day)), 0) as assignment_to_purchase,
               coalesce(purchases, 0) as purchases,
               assignment_date
            from `mydataset.mytable`
        )
    )
)

推荐阅读