我很难计算唯一值的百分比。计算精确值(总计,总和等)的百分比没有问题。但是使用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。预先谢谢你。
答案 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
)
)