GROUP BY
в array_agg
с distinct
и cardinality
для подсчета длины должно получиться требуемый результат:
WITH dataset (col1, col2) AS (
VALUES ('abc', 12345),
('abc', 12345),
('bcd', 45689),
('abc', 78945),
('bcd', 54782),
('def', 12345),
('def', 12345)
)
--query
select col1,
array_agg(distinct col2) col2,
cardinality(array_agg(distinct col2)) count
from dataset
group by col1
order by col1 -- for output ordering
Выход:
столбец1 | столбец2 | считать |
---|---|---|
азбука | [12345, 78945] | 2 |
bcd | [45689, 54782] | 2 |
деф | [12345] | 1 |
Если вам нужно другое форматирование для col2
- используйте array_join
.
@Nikhil был рад помочь. Если ответ вам подходит, отметьте его как принял один (галочка рядом с ответом). Что касается суммы - да, вы можете либо через array_sum
, либо через reduce
.
Я принял ответ. Я не могу вычислить array_sum, не могли бы вы помочь, если не возражаете
@Нихил array_sum(array_agg(col2))
(или array_sum(array_agg(distinct col2))
)? Не уверен, в чем проблема. Если это не работает, можете ли вы добавить некоторые фактические значения и ошибки, которые вы получаете.
Я обновил вопрос. Дайте мне знать, если это не ясно
я получаю сообщение об ошибке Функция 'array_sum' не зарегистрирована
Большое тебе спасибо. Это сработало. Если у меня есть col3 с ценами на значения Col2. Могу ли я получить еще один столбец в результате с суммой цен для значений столбца2? Например, 12345 — 10 долларов, а 78945 — 20 долларов, затем abc [12345,78945] 2 30 долларов.