Presto - Подсчет вхождений строк во всех строках

Я новичок в Presto и пытаюсь написать запрос по следующей таблице colors. Я пробовал использовать flatten и histogram, но безуспешно. Может ли кто-нибудь помочь мне понять, как это сделать? Спасибо!

row   words
0     yellow blue red
1     red
2     yellow red

слов это список varchar прямо сейчас.

Желаемый результат:

word      count
yellow    2
red       3
blue      1

Вот что у меня есть на данный момент:

WITH
dataset AS (
  SELECT ARRAY
  [
    ARRAY['yellow','blue','red'],
    ARRAY['red'],
    ARRAY['yellow','red']
  ] AS words
)
SELECT words
FROM dataset

person felix_xiao    schedule 03.11.2020    source источник


Ответы (1)


Один из способов - преобразовать это в массив, а затем в таблицу и подсчитать:

select w.word, count(*)
from t cross join
     unnest(split(t.words, ' ')) as w(word)
group by w.word;
person Gordon Linoff    schedule 03.11.2020
comment
Спасибо за быстрый ответ! Я обновил свой вопрос, включив в него код, который у меня есть. Я попробовал ваше предложение и получаю mismatched input 'UNNEST'. Вот что я пробовал: SELECT w.word, count(*) FROM dataset CROSS JOIN LATERAL UNNEST(words) AS w(word) GROUP BY w.word. Я делаю что-то неправильно? - person felix_xiao; 03.11.2020
comment
@felix_xiao. . . lateral может быть ненужным. - person Gordon Linoff; 03.11.2020