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

时间:2019-11-25 08:47:22

标签: 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。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

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

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
    )
  )