解决方法以计算ClickHouse中唯一值的百分比

我很难计算唯一值的百分比。计算精确值(总计,总和等)的百分比没有问题。但是使用uniq函数的结果总是不同的,这是可以理解的。主要的问题是百分数不加。例如,总唯一性是5000,但总和可能是4999或5001。例如:

WITH (
    SELECT uniq(t.id)
    FROM test.table t
) AS total

SELECT t.name as gender,t.age as age,uniq(t.id) as uniques,COALESCE((( uniques / total ) * 100),0) as uniquesPercent
FROM test.table t
GROUP BY gender,age

因此,有没有任何方法可以解决此问题。由于性能问题,我无法使用uniqExact。预先谢谢你。

lk38264945 回答:解决方法以计算ClickHouse中唯一值的百分比

让我们假设同一用户不能有多个性别或年龄(换句话说,同一用户不能出现在多个组中),那么总数可以计算为每个组的唯一计数之和:

SELECT result.1 gender,result.2 age,result.3 uniquesPercent
FROM (
  SELECT 
    groupArray((gender,age,uniques)) groups,arraySum(x -> x.3,groups) total,arrayJoin(arrayMap(x -> (x.1,x.2,x.3 / total),groups)) result
  FROM (
    SELECT
        t.name AS gender,t.age AS age,uniq(t.id) AS uniques
    FROM test.table AS t
    GROUP BY
        gender,age
    )
  )
本文链接:https://www.f2er.com/3037986.html

大家都在问