所有客户从第一笔交易到最后一笔交易之间的平均时间是多少(平均生命周期-累积)

时间:2020-01-09 20:44:39

标签: sql group-by average aggregate-functions

我能够计算出每个客户第一次交易和最后一次交易之间的时间(请参见下面的代码)。

SELECT customer_id, max(order_time) - min(order_time) as days_from_first_to_last_order,
 (case when count(*) > 1
             then datediff(day, min(order_time), max(order_time)) / (count(*) - 1)
        end) as avg_time
FROM ORDERS
group by customer_id

我该如何回答以下问题:我的客户从第一笔交易到最后一笔交易的平均时间是多少?

2 个答案:

答案 0 :(得分:1)

只需添加一个聚合级别:

SELECT AVG(avg_time) avg_time
FROM (
    SELECT 
        CASE 
            WHEN COUNT(*) > 1 
            THEN datediff(day, min(order_time), max(order_time)) / (count() - 1) 
        END as avg_time 
    FROM orders
    GROUP BY customer_id
) t

注意:

  • 您只需要子查询中的列avg_time即可获得预期结果,因此我删除了其他列;这意味着您的RDBMS的聚合计算会减少

  • case表达式周围的
  • 括号是多余的

答案 1 :(得分:1)

您可以使用第二级聚合:

SELECT AVG(avg_time * 1.0)
FROM (SELECT customer_id, max(order_time) - min(order_time) as days_from_first_to_last_order, (case when count() > 1 then 
             datediff(day, min(order_time), max(order_time)) / nullif(count() - 1, 0)  as avg_time
      FROM ORDERS
      GROUP BY customer_id
     ) c

您会注意到,我通过使用nullif()简化了子查询。

相关问题