【问题标题】:Calculate cumulative distinct计算累计不同
【发布时间】:2023-02-26 09:06:05
【问题描述】:

我在数据库中有一个包含以下内容的表:

  • created_at
  • 订单号
  • 客户编号

我想计算每天累计的非重复客户数。

我写了这个查询

SELECT
    created_at::date,
    COUNT(DISTINCT customer_id) OVER (ORDER BY created_at::date) as cumulative_users
FROM orders
GROUP BY 1
ORDER BY 1

然后我发现 PostgreSQL 在窗口函数中不支持 distinct。

你能帮我写这段代码吗?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    恕我直言,这里不需要窗口功能。

    select created_at , count(distinct customer_id) from order_table group by created_at;
    

    SQLFiddle

    【讨论】:

    • 我想计算每天的累计用户数,而不是每天的聚合数。感谢您的回复
    • 不确定我是否正确,因为你自己的尝试 - 不管它是否有效 - 按日期分组......也许你提供样本数据和预期结果...... SELECT SUM(num)FROM(SELECT COUNT(DISTINCT customer_id ) AS num FROM order_table GROUP BY created_at) AS a;
    【解决方案2】:
    WITH firstseen AS (
        SELECT
            customer_id,
            MIN(created_at) created_at
        FROM orders
        GROUP BY 1
    )
    SELECT
        DISTINCT created_at :: date,
        COUNT(customer_id) OVER (ORDER BY created_at :: date) daily_cumulative_count
    FROM firstseen
    ORDER BY 1
    

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 2020-12-17
      • 2022-01-23
      • 2019-06-06
      相关资源
      最近更新 更多