带分组聚合的SQL计数

我正在尝试编写一个SQL查询,该查询允许我使用历史数据创建折线图。我试图弄清楚随着时间的流逝(按日计算),有多少用户正在使用我的应用的每个版本。我的Y轴将是所有应用程序的使用百分比(在100个应用中),X轴是一天,并且每个构建版本都不同。在任何时候,所有行的总和应等于100%。

由于该查询除了日期外还应按版本/版本进行分组,因此我试图找出如何获取查询中任何给定日期的总用户百分比。到目前为止,我可以得到此查询:

SELECT DISTINCT 
    sub.Version,sub.Build,sub.app_id,sub.Users,sub.`day`,(
        SELECT COUNT(DISTINCT user_id)
        FROM snowplow_enricher_good seg
    ) AS Total,(sub.Users/Total) * 100 AS Percent
FROM 
(
    SELECT
        visitParamExtractString(seg.contexts,'version') AS Version,visitParamExtractString(seg.contexts,'build') AS Build,seg.app_id,seg.`day`,concat(
            Version,' (',Build,')'
        ) AS AppBuildVersion,COUNT(DISTINCT seg.user_id) AS Users
    FROM snowplow_enricher_good seg
    GROUP BY Version,app_id,`day`
    ORDER BY Users DESC
) AS sub
WHERE sub.app_id = 'APPID';

请注意,当前显示的百分比是所有天的百分比,而不是单日。我尝试在自定义WHERE语句中创建一个FROM子句,但是失败了。

预先感谢您:)

jhk911 回答:带分组聚合的SQL计数

groupArray

switch
,

可以使用一系列的联接和子查询来弄清楚:

SELECT 
    day,app_id,version,version_count,app_count,(version_count / app_count) * 100 AS percent
FROM (
    SELECT 
        day,visitParamExtractString(contexts,'version') AS version,count(DISTINCT user_id) AS version_count
    FROM 
        snowplow_enricher_good
    where 
        day >= subtractDays(today(),30)
    GROUP BY 
        day,version
) 
INNER JOIN (
    SELECT 
        day,count(DISTINCT user_id) AS app_count
    FROM 
        snowplow_enricher_good
    WHERE 
        day >= subtractDays(today(),app_id
)
USING 
    day,app_id
WHERE
    app_id = 'APPID'
ORDER BY 
    day DESC,version;
本文链接:https://www.f2er.com/3077533.html

大家都在问