在 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 中过滤计数的主要内容,如果未能解决你的问题,请参考以下文章

如何在ClickHouse中实现资源隔离?火山引擎实践经验分享

火山引擎:ClickHouse增强计划之“多表关联查询”

火山引擎:ClickHouse增强计划之“多表关联查询”

火山引擎:ClickHouse增强计划之“多表关联查询”

ClickHouse-尚硅谷(2. 入门-安装)学习笔记

ClickHouse-尚硅谷(2. 入门-安装)学习笔记