У меня есть набор данных в форме.Выберите случайный атрибут из группы в Redshift
id | attribute
-----------------
1 | a
2 | b
2 | a
2 | a
3 | c
Желаемый результат:
attribute| num
-------------------
a | 1
b,a | 1
c | 1
В MySQL, я хотел бы использовать:
select attribute, count(*) num
from
(select id, group_concat(distinct attribute) attribute from dataset group by id) as subquery
group by attribute;
Я не уверен, что это может быть сделано в Redshift, потому что он не поддерживает GROUP_CONCAT или любой Psql групповые агрегированные функции, такие как array_agg() или string_agg(). См. this question.
Альтернативное решение, которое сработало бы, если бы у меня был способ выбрать случайный атрибут из каждой группы, а не group_concat. Как это может работать в Redshift?
Это работает, спасибо!Это также дало мне идею более простого способа написать аналогичный запрос: – dima
SELECT id, атрибут first_value FROM (FROM() SELECT id, FIRST_VALUE (атрибут) OVER (PARTITION BY ORDER BY random() ROWS МЕЖДУ неограниченным предыдущим AND неограниченным следующим) FROM dataset) GROUP BY id, attribute ORDER BY id; – dima
@dima в интересах сообщества, вы должны либо принять ответ Масаси, либо добавить свое собственное решение в качестве ответа и принять его. – Sim