在 ClickHouse 中过滤计数
Posted
技术标签:
【中文标题】在 ClickHouse 中过滤计数【英文标题】:FILTER WHERE at count in ClickHouse 【发布时间】:2019-08-22 17:26:44 【问题描述】:我正在尝试迁移 ClickHouse 中的一个 Postgres 表。这是我在 ClickHouse 提出的建议:
CREATE TABLE loads(
country_id UInt16,
partner_id UInt32,
is_unique UInt8,
ip String,
created_at DateTime
) ENGINE=MergeTree PARTITION BY toYYYYMM(created_at) ORDER BY (created_at);
is_unique 这里是一个 0 或 1 的布尔值。我想知道聚合计数:country_id、partner_id 和 created_at,但我还想知道这些负载中有多少是唯一负载。在 Postgres 它看起来像:
SELECT
count(*) AS loads,
count(*) FILTER (WHERE is_unique) AS uniq,
country_id,
partner_id,
created_at::date AS ts
FROM loads
GROUP BY ts, country_id, partner_id
是否可以在 ClickHouse 或我应该重新考虑如何聚合数据?除了 count 可以得到 expr 而不是星号之外,我在手册中没有找到任何线索,但 count(is_unique = 1)
不起作用,只返回与 count 相同的数量(* )。
【问题讨论】:
【参考方案1】:我刚刚在发布后几分钟内找到了答案:
SELECT count(*), countIf(is_unique = 1) /* .. */
祝你好运。
【讨论】:
以上是关于在 ClickHouse 中过滤计数的主要内容,如果未能解决你的问题,请参考以下文章