Эквивалент внутри группы в Presto - PullRequest
0 голосов
/ 12 апреля 2019

В Postgres следующий запрос выводит наиболее часто покупаемый сыр для каждого покупателя:

SELECT
    customer,
    MODE() WITHIN GROUP (ORDER BY "subcategory") AS "fav_cheese"
FROM dft
WHERE category = 'CHEESE'
GROUP BY
    customer

Возвращает:

customer   fav_cheese
       1      cheddar    # customer1's most-frequently-purchased cheese is cheddar
       2         blue    # customer2's most-frequently-purchased cheese is blue
       3     shredded    # customer3's most-frequently-purchased cheese is shredded

Как добиться того же результата в Presto?

Я пробовал разные методы, но пока безуспешно.

1 Ответ

1 голос
/ 12 апреля 2019

Вы можете использовать оконные функции:

SELECT customer, subcategory AS fav_cheese
FROM (SELECT customer, category, subcategory, COUNT(*) as cnt,
             ROW_NUMBER() OVER (PARTITION BY customer ORDER BY COUNT(*) DESC) as seqnum
      FROM dft
      WHERE category = 'CHEESE'
      GROUP BY customer, category, subcategory
     ) t
WHERE seqnum = 1;
...