-- Задание 1 CREATE TABLE mnoskov.users ON CLUSTER clickhouse_cluster ( user_id UInt32, name String, age UInt8, country String, is_active UInt8 ) ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/mnoskov/users', '{replica}' ) ORDER BY user_id; INSERT INTO mnoskov.users (user_id,name,age,country,is_active) VALUES (1,'Ivan',30,'RU',1), (2,'Anna',25,'RU',1), (3,'Petr',45,'RU',0), (4,'Olga',35,'RU',1), (5,'John',55,'US',1), (6,'Alice',42,'US',0), (7,'Tom',38,'US',1), (8,'Lucas',28,'BR',1), (9,'Maria',60,'BR',1), (10,'Joao',27,'BR',0), (11,'Kenji',33,'JP',1), (12,'Yuki',29,'JP',0), (13,'Chen',40,'CN',1), (14,'Li',48,'CN',1), (15,'Fatima',31,'AE',1), (16,'Ahmed',36,'AE',1), (17,'George',24,'US',1), (18,'Nina',34,'RU',1), (19,'Max',50,'DE',1), (20,'Sophie',22,'DE',0); SELECT * FROM mnoskov.users; --1 SELECT user_id, age, is_active FROM mnoskov.users WHERE is_active = TRUE ORDER BY age DESC LIMIT 10; --2 SELECT name, country FROM mnoskov.users WHERE country = 'RU' ORDER BY name; --3 SELECT user_id, age, is_active FROM mnoskov.users WHERE is_active = TRUE LIMIT 10; -- Данные вывелить так как лежат на диске. --4 SELECT country, count() FROM mnoskov.users GROUP BY country; --5 SELECT country, min(age) AS min_age, max(age) AS max_age FROM mnoskov.users GROUP BY country; --6 SELECT country, count() AS cnt_users FROM mnoskov.users GROUP BY country ORDER BY cnt_users DESC; --Доп SELECT uniqExact(country), uniq(country) FROM mnoskov.users; -- uniqExact(country) - кол-во уникальных значений в колонке country. Но uniq работает также. -- В инете написано что uniq быстрее. -- Задание 2 CREATE TABLE mnoskov.events1 ON CLUSTER clickhouse_cluster ( user_id UInt32, event_time DateTime, event_type String ) ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/mnoskov/events1', '{replica}' ) ORDER BY(user_id,event_time); INSERT INTO mnoskov.events1 (user_id,event_time,event_type) VALUES (1,'2025-07-17 09:00:00','click'), (1,'2025-07-17 09:05:00','view'), (1,'2025-07-17 09:10:00','purchase'), (2,'2025-07-17 10:00:00','click'), (2,'2025-07-17 10:05:00','click'), (2,'2025-07-17 11:00:00','view'), (3,'2025-07-16 12:00:00','view'), (3,'2025-07-16 12:30:00','click'), (3,'2025-07-17 08:00:00','purchase'), (4,'2025-07-17 13:00:00','click'), (4,'2025-07-17 14:00:00','view'), (4,'2025-07-17 15:00:00','view'), (5,'2025-07-16 20:00:00','view'), (5,'2025-07-17 01:00:00','click'), (5,'2025-07-17 06:00:00','purchase'), (6,'2025-07-17 07:30:00','view'), (6,'2025-07-17 08:45:00','click'), (7,'2025-07-16 23:59:59','click'), (7,'2025-07-17 00:01:00','purchase'), (7,'2025-07-17 10:10:00','view'); SELECT * FROM mnoskov.events1; --1 SELECT user_id, event_time, event_type, count() OVER(PARTITION BY user_id ORDER BY event_time) AS com_users FROM mnoskov.events1; --2 SELECT user_id, event_time, event_type, row_number() OVER (PARTITION BY user_id ORDER BY event_time) rn, dense_rank() OVER (PARTITION BY user_id ORDER BY event_time) dr, count() OVER(PARTITION BY user_id ORDER BY event_time) AS c, sum(1) OVER(PARTITION BY user_id ORDER BY event_time) AS s FROM mnoskov.events1; --3 SELECT user_id, event_time, event_type, count() OVER(PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS com_users, count() OVER(PARTITION BY user_id ORDER BY event_time ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS com_users2 FROM mnoskov.events1; -- все четенько работает, никаких ошибкок нет --4-5-6 WITH recent_events AS ( SELECT user_id, event_time, event_type FROM mnoskov.events1 WHERE event_time < now() - INTERVAL 1 DAY ) SELECT user_id, count(*) AS cnt_user_actions FROM recent_events GROUP BY user_id ORDER BY cnt_user_actions DESC LIMIT 5; -- не понял, как сделать 6 пункт. -- Ответ на вопрос - ну да - поддерживает.