Sql 查询以获取DAU并使用自连接进行安装
我一直在努力获取DAU的数量和每天的安装数量,这些数据被一些用户数据分解,比如平台、OS_版本、国家和其他一些专栏。 其目的是让查询返回如下内容: 日期| DAU |安装|平台|操作系统版本|国家| 2017-05-01 | 2 | 0 |安卓| 5.0 |美国| 2017-05-01 | 1 | 1 |安卓| 6.0 |美国| 2017-05-01 | 1 | 1 |安卓| 6.0 | JP| 2017-05-01 | 3 | 0 |安卓| 6.0 | MX| 2017-05-01 | 10 | 0 |安卓| 5.0 | MX| 如您所见,DAU和安装将由这些列和其他一些列传播。非常简单的分析查询 所有信息都位于同一个表中,因此数据需要由表本身进行操作和连接 一个不会显示信息的列是event列,其中包含安装和屏幕事件。每当用户打开游戏中的任何屏幕时,甚至在登录后,屏幕事件都会被调用,因此屏幕事件将用于计算DAU 我最初的想法是创建两个CTE,每个CTE只有通过事件过滤的记录,一个是通过安装事件过滤的,另一个是通过屏幕事件过滤的,然后我提取日期中的日期部分,在unix时间戳中,并在每个CTE中创建另一列,install_day来计算安装CTE上的安装次数,以及DAU CTE计算DAU的活动日 创建这两个cte后,我将使用平台作为条件加入它们,如:dau_cte.platform=install_cte.platform 我已经尝试过以几种不同的方式创建这样的查询,但是使用了上面描述的相同逻辑,但是每次都会得到大量重复数据。因此,我不想展示我的查询代码来帮助修复它,我想听听社区的意见,你们会用什么方法来获得这些结果 顺便说一句,此查询将在Presto中运行。。。Sql 查询以获取DAU并使用自连接进行安装,sql,analytics,presto,Sql,Analytics,Presto,我一直在努力获取DAU的数量和每天的安装数量,这些数据被一些用户数据分解,比如平台、OS_版本、国家和其他一些专栏。 其目的是让查询返回如下内容: 日期| DAU |安装|平台|操作系统版本|国家| 2017-05-01 | 2 | 0 |安卓| 5.0 |美国| 2017-05-01 | 1 | 1 |安卓| 6.0 |美国| 2017-05-01 | 1 | 1 |安卓| 6.0 | JP| 2017-05-01 | 3 | 0 |安卓| 6.0 | MX| 2017-05-01 | 10
提前谢谢 查询必须相当简单。最终查询应按日期、国家/地区、平台和版本分组。据我所知,感兴趣的两个度量是某些唯一用户或事件标识符的不同计数。根据presto docs,没有COUNT\u DISTINCTX if Y类型的聚合,这只剩下在子查询中执行COUNT distinct,如您所述。接下来的查询就可以做到这一点。注意使用COALESCE来解释丢失的数据
SELECT
a.date,
a.platform,
a.os_ver,
a.country,
COALESCE(a.DAU, 0) as DAU,
COALESCE(b.installs, 0) as installs,
FROM (
SELECT
date,
platform,
os_ver,
country,
COUNT(DISTINCT <user_id>) AS DAU
FROM <table_name>
WHERE event_name = 'screen'
GROUP BY 1,2,3,4
) a
FULL JOIN (
SELECT
date,
platform,
os_ver,
country,
COUNT(DISTINCT <user_id>) AS installs
FROM <table_name>
WHERE event_name = 'install'
GROUP BY 1,2,3,4
) b
ON
a.date = b.date
AND a.platform = b.platform
AND a.os_ver = b.os_ver
AND a.country = b.country
谢谢你,尼古拉,我稍后会尝试并发回结果。大家都记得联合的必要性。当我向该查询中添加更多列时,是否应在子查询中、group by子句中以及ON条件下的后面添加新列?是的,除非您使用其他唯一标识符group by或UDAF进行不同计数。