在使用子句时计数不同

Posted

技术标签:

【中文标题】在使用子句时计数不同【英文标题】:Count distint while using clause over 【发布时间】:2021-07-15 10:58:34 【问题描述】:

我必须找到在 BigQuery 中统计最近(例如 30 天)中不同用户的解决方案。我的结果与我从 Google Analytics 获得的结果并不接近。

我在下一步中对不同的用户进行了子查询,我从子查询中选择结果为 Active_Users_28_Days(来自(选择...),我正在计算过去 28 天内访问网站的唯一访问者的数量(如下面查询的一部分) ,但我的结果太高了,我不知道为什么。

COUNT(Visitors) OVER (PARTITION BY Date ORDER BY Date ROWS BETWEEN 27 PRECEDING and CURRENT ROW) as Active_Users_28_Days

你知道为什么会这样吗?我也想使用类似的方式计算特定类型的客户,但我不知道为什么我的结果是计算 2 天的高事件(前 1 行和当前行之间的行或前 2 行和当前行之间的行 - 两者都给出错误的结果当我将 sql 查询的结果与仅按日期分组的结果进行比较时)。

【问题讨论】:

【参考方案1】:

您计算的是用户数,而不是不同的用户数。请改用COUNT(DISTINCT Visitors)

【讨论】:

在使用 over 时不能将 distinct 直接计入计数。这就是这篇文章的重点。我在上一步中创建了带有不同用户的子查询的临时表。 奇怪...docs中有一个例子

以上是关于在使用子句时计数不同的主要内容,如果未能解决你的问题,请参考以下文章

使用 where 子句时,如果数据为空,则将数据计数为零

使用 where 子句检索数据时,无论如何要检索计数 0 吗? (Laravel 雄辩)

使用 cursor.getCount() 获取计数或在 SQL 子句上使用 COUNT 执行 rawQuery?

MySQL如何使用仅用于计数的where子句计算左联接?

具有子句mysql的嵌套计数?

如何计算 groupBy 子句中的计数,其中还包括空/空字段