Подсчитайте уникальные значения после присоединения к массиву в Presto

У меня есть 3 столбца, как показано ниже

столбец1столбец2цена
азбука1234510
азбука1234510
bcd4568915
азбука7894520
bcd5478213
деф1234510
деф1234510

Я хочу получить результат, как показано ниже.

столбец1столбец2считатьКоличество
азбука12345,78945230
bcd45689,54782228
деф12345110
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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.

Большое тебе спасибо. Это сработало. Если у меня есть col3 с ценами на значения Col2. Могу ли я получить еще один столбец в результате с суммой цен для значений столбца2? Например, 12345 — 10 долларов, а 78945 — 20 долларов, затем abc [12345,78945] 2 30 долларов.

Nikhil 28.03.2022 14:25

@Nikhil был рад помочь. Если ответ вам подходит, отметьте его как принял один (галочка рядом с ответом). Что касается суммы - да, вы можете либо через array_sum, либо через reduce.

Guru Stron 28.03.2022 14:33

Я принял ответ. Я не могу вычислить array_sum, не могли бы вы помочь, если не возражаете

Nikhil 28.03.2022 15:05

@Нихил array_sum(array_agg(col2)) (или array_sum(array_agg(distinct col2)))? Не уверен, в чем проблема. Если это не работает, можете ли вы добавить некоторые фактические значения и ошибки, которые вы получаете.

Guru Stron 28.03.2022 15:31

Я обновил вопрос. Дайте мне знать, если это не ясно

Nikhil 28.03.2022 15:39

я получаю сообщение об ошибке Функция 'array_sum' не зарегистрирована

Nikhil 29.03.2022 08:28

@Nikhil, ты используешь Афину? Если да (или просто какая-то более старая предварительная версия), то array_sum может быть недоступен, и его следует обойти с помощью reduce. Кроме того, поскольку кажется, что вам нужны «различные» значения, потребуется и другой подход.

Guru Stron 29.03.2022 14:54

Другие вопросы по теме