SQL:对更多组进行 COUNT DISTINCT

标签 sql postgresql count

我有这个问题:

SELECT 
        date_trunc('week', q.order_date::date+2)::date-2 AS weekly,
        COUNT(DISTINCT q.provider_username) AS engaged_providers
FROM tbl_quotes q
GROUP BY weekly

我需要的是 COUNT(DISTINCT q.provider_username) 超过 4 周,而不仅仅是一个,而且我不想更改我的日期截断。显然我不能使用 OVER(ORDER BY ...) 因为 DISTINCT 没有为窗口函数实现。还有其他解决方案吗?

最佳答案

样本数据和期望的结果会很有帮助。对于您的问题的一种解释,我建议使用相关子查询。日期算法有点神秘,但我认为这就是您想要的:

SELECT weekly,
       (SELECT COUNT(DISTINCT q.provider_username)
        FROM tbl_quotes q
        WHERE q.order_date >= w.weekly - interval '3 week' and
              q.order_date < w.weekly + interval '1 week'
       ) as engaged_providers
FROM (SELECT DISTINCT date_trunc('week', q.order_date::date+2)::date-2 as weekly
      FROM tbl_quotes q
     ) w;

关于SQL:对更多组进行 COUNT DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345618/

相关文章:

MySQL关于获取具体列的问题

sql - 确定查询的进度 (Oracle PL/SQL)

java - 使用java api在postgres自定义类型字段中插入值

vb.net - 如何正确计算文件夹中的文件数

SQL View 从非空表推断可为空列?

Mysql - 根据条件删除重复行的sql查询

postgresql - 在 postgresql 中,为什么 _PG_init 被调用两次?

sql - 如何对三个表使用 MAX 函数?

php - 如何计算数组中重复项的出现次数

sql - 当 Count(*) 结果为 Null 时返回 1 而不是 0