【问题标题】:FILTER WHERE at count in ClickHouse在 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 相同的数量(* )。

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

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

    SELECT count(*), countIf(is_unique = 1) /* .. */
    

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 2020-11-14
      • 2018-05-15
      • 2020-10-24
      • 2021-10-29
      • 2021-09-12
      • 2019-11-23
      • 1970-01-01
      • 2021-08-16
      相关资源
      最近更新 更多