#sql #amazon-web-services #amazon-athena #presto
Вопрос:
У меня есть следующий запрос, который показывает общий объем продаж по каждому продукту на почасовой основе. Тем не менее, это очень большие данные, и я не хочу видеть все продукты, поэтому хотел бы видеть топ-1000 product_id на основе sales
для каждого date
, hour
, и category_id
измерений.
SELECT date,
hour,
category_id,
product_id,
sum(sales) AS sales
FROM a
LEFT JOIN
ON a.product_id = b.product_id
WHERE date(date) >= date('2021-01-01')
GROUP BY 1, 2, 3, 4
Как это сделать в Афине?
Заранее спасибо.
Ответ №1:
Вы можете использовать rank
функцию для своего результата, а затем отфильтровать соответствующие ранги:
SELECT date,
hour,
category_id,
product_id,
sales
FROM
(
SELECT *,
rank() OVER (PARTITION BY date, hour, category_id
ORDER BY sales DESC) AS rnk
FROM (your query)
)
WHERE rnk <= 1000
Комментарии:
1. Привет @Guru, спасибо за ваш ответ. Запрос выдает следующую ошибку: столбец «час» не может быть разрешен. Что вы об этом думаете?
2. @datazang это работает просто отлично. Не уверен, чего вам не хватает в вашем запросе.