`time` DateTime64(3) CODEC(DoubleDelta),
`psid` String,
`paused` UInt8
)
ENGINE = MergeTree
ORDER BY (time, xxHash64(psid));
insert into test (type, time, psid, paused) values
('TYPE1', now64(), 'PSID1', 1),
('TYPE2', now64(), 'PSID1', 1),
('TYPE1', now64(), 'PSID1', 0),
('TYPE2', now64(), 'PSID1', 0),
('TYPE1', now64(), 'PSID2', 0),
('TYPE1', now64(), 'PSID2', 0),
('TYPE1', now64(), 'PSID2', 0),
('TYPE2', now64(), 'PSID2', 0),
('TYPE1', now64(), 'PSID2', 1),
('TYPE1', now64(), 'PSID2', 0),
('TYPE1', now64(), 'PSID2', 0),
('TYPE1', now64(), 'PSID2', 0)
;
-- работает
select
row_number() over w as rn,
sum(paused) over w as cnt_paused,
*
from test e
where psid = 'PSID2'
window w as (partition by e.psid order by e.time)
-- не работает:
-- DB::Exception: Column `type` is not under aggregate function and not in GROUP BY: While processing row_number() OVER w AS rn, countIf(paused = 1) AS cnt_paused, type, time, psid, paused. (NOT_AN_AGGREGATE)
select
row_number() over w as rn,
sumIf(1, paused=1) over w as cnt_paused,
*
from test e
where psid = 'PSID2'
window w as (partition by e.psid order by e.time)
подскажите пожалуйста по window functions. если первый запрос работает, почему второй нет? я чего-то не понимаю?
отличие одно: в первом sum(paused), во втором sumIf(1, paused=1). в реальности запрос посложенее, но суть та же
да вроде оба работают SELECT row_number() OVER w AS rn, sumIf(1, paused = 1) OVER w AS cnt_paused, * FROM test AS e WHERE psid = 'PSID2' WINDOW w AS (PARTITION BY e.psid ORDER BY e.time ASC) Query id: 9c95e165-c1c9-4da4-a7ad-4eec209a09b9 ┌─rn─┬─cnt_paused─┬─type──┬────────────────────time─┬─psid──┬─paused─┐ │ 1 │ 1 │ TYPE1 │ 2021-12-27 14:25:03.400 │ PSID2 │ 0 │ │ 2 │ 1 │ TYPE1 │ 2021-12-27 14:25:03.400 │ PSID2 │ 0 │ │ 3 │ 1 │ TYPE1 │ 2021-12-27 14:25:03.400 │ PSID2 │ 0 │ │ 4 │ 1 │ TYPE2 │ 2021-12-27 14:25:03.400 │ PSID2 │ 0 │ │ 5 │ 1 │ TYPE1 │ 2021-12-27 14:25:03.400 │ PSID2 │ 1 │ │ 6 │ 1 │ TYPE1 │ 2021-12-27 14:25:03.400 │ PSID2 │ 0 │ │ 7 │ 1 │ TYPE1 │ 2021-12-27 14:25:03.400 │ PSID2 │ 0 │ │ 8 │ 1 │ TYPE1 │ 2021-12-27 14:25:03.400 │ PSID2 │ 0 │ └────┴────────────┴───────┴─────────────────────────┴───────┴────────┘ 8 rows in set. Elapsed: 0.003 sec.
какая версия? я проверил в 21.12.2 и 21.4.4
select namt,value from system.settings whree changed
Connected to ClickHouse server version 21.12.2 revision 54452. localhost :) select name,value from system.settings where changed ┌─name─────────────┬─value───────┐ │ load_balancing │ random │ │ max_memory_usage │ 10000000000 │ └──────────────────┴─────────────┘
похоже потом исправили в 21.13
уфф, спасибо
вам кстати не нужен if
просто sum(paused = 1) OVER w AS cnt_paused,
это хуже, оно на реальных данных работает, но дает неадекватные значения
Обсуждают сегодня