Presto эквивалент MySQL group_concat

Я новичок в Presto и хочу получить ту же функциональность, что и функция group_concat в MySQL. Следующие два варианта эквивалентны? Если нет, какие-нибудь предложения о том, как воссоздать функциональность group_concat в Presto?

MySQL:

select 
  a,
  group_concat(b separator ',')
from table
group by a

Престо:

select 
  a,
  array_join(array_agg(b), ',')
from table
group by a

(Нашел это как предлагаемый обходной путь Presto здесь при поиске функциональности group_concat.)


person Mike Moyer    schedule 23.05.2017    source источник


Ответы (3)


Попробуйте использовать это вместо group_concat в Presto ::

select 
  a,
  array_join(array_agg(b), ',')
from table
group by a
person Rahul Ahuja    schedule 24.02.2018

Кроме того, если вы ищете только уникальные значения - эквивалент group_concat(distinct ... separator ', ') - попробуйте следующее:

array_join(array_distinct(array_agg(...)), ', ')
person Jacob Rose    schedule 20.03.2018
comment
Я обнаружил, что (в данном конкретном случае достижения отличного group_concat) использование вложенных запросов для ручного получения значений DISTINCT работает лучше, чем array_distinct UDF. Не уверен, что это будет универсально верно, хотя - person y2k-shubham; 18.09.2018

В этом ответе нет функции, хотя функция была запрошена.

Ближайший эквивалент указан в вашем вопросе.

WITH tmp AS (
SELECT 'hey' AS str1
UNION ALL
SELECT ' there'
)
SELECT array_join(array_agg(str1), ',', '') AS joined
FROM tmp
person duber    schedule 20.06.2017