在 ClickHouse 中按计数过滤 WHERE

Jam*_*May 4 clickhouse

我正在尝试迁移 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);
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

ClickHouse 可以吗?还是我应该重新考虑如何聚合数据?我在手册中没有找到任何线索,除了count可以得到expr而不是星号,但count(is_unique = 1)不起作用,只是返回与 count(*) 相同的数量。

Jam*_*May 12

我在发布后几分钟内就找到了答案:

SELECT count(*), countIf(is_unique = 1) /* .. */
Run Code Online (Sandbox Code Playgroud)

祝你好运。