У меня есть простая таблица:Показать количество строк с одинаковыми значениями
CREATE TABLE clicks
(
Year UInt16,
Week UInt8,
Day UInt8,
Month UInt8,
ClickDate Date,
ClickTime DateTime,
AdvertId String,
UserId String,
Age UInt8,
Country FixedString(2),
Gender Enum8('male' = 1, 'female' = 2),
Ip String
)
ENGINE = MergeTree(ClickDate, (Year, ClickDate), 8192);
Можно ли добавить в один столбец с суммой строк для одного уникального значения без дублирования значений и группировать их по ClickDate
? Например. У меня есть запрос:
SELECT
count() AS Summary,
ClickDate,
SUM(roundAge(Age) = 17) AS Age_17,
SUM(roundAge(Age) = 25) AS Age_25,
SUM(roundAge(Age) = 35) AS Age_35,
SUM(roundAge(Age) = 45) AS Age_45,
SUM(Age = 0) AS Age_empty
FROM clicks
GROUP BY ClickDate
В этом случае, я должен дублировать каждый из Age
значений
SUM(roundAge(Age) = 17) AS Age_17,
SUM(roundAge(Age) = 25) AS Age_25
Как я могу избавиться от этого дублирования? Что я ожидаю:
Источник данных:
┌──ClickDate─┬─RoundedAge─┐
│ 2016-10-09 │ 17 │
└────────────┴────────────┘
┌──ClickDate─┬─RoundedAge─┐
│ 2016-10-09 │ 25 │
│ 2016-10-09 │ 17 │
│ 2016-10-09 │ 45 │
│ 2016-10-09 │ 45 │
│ 2016-10-09 │ 35 │
│ 2016-10-09 │ 45 │
│ 2016-10-09 │ 25 │
│ 2016-10-09 │ 18 │
│ 2016-10-10 │ 25 │
│ 2016-10-10 │ 25 │
└────────────┴────────────┘
┌──ClickDate─┬─RoundedAge─┐
│ 2016-10-09 │ 17 │
└────────────┴────────────┘
Требуемая мощность:
┌─Summary─┬──ClickDate─┬─Age_17─┬─Age_25─┬─Age_35─┬─Age_45─┬─Age_empty─┐
│ 10 │ 2016-10-09 │ 3 │ 2 │ 1 │ 3 │ 0 │
│ 2 │ 2016-10-10 │ 0 │ 2 │ 0 │ 0 │ 0 │
└─────────┴────────────┴────────┴────────┴────────┴────────┴───────────┘
Я думаю, вы должны использовать 'COUNT' вместо' SUM'. В PostgreSQL вы можете подсчитать булевские выражения, добавив «OR NULL», например. 'COUNT (roundAge (Возраст) = 17 ИЛИ NULL)'. Не знаю, работает ли это в других СУБД. – clemens
В Clickhouse 'COUNT' не принимает аргументы :( – blits