我有一个带有列的非规范化表:
buyer_id
order_id
item_id
item_price
item_category
我想返回每个buyer_id返回1行的内容
buyer_id, sum(item_price), item_category
- 但仅限于具有该特定buyer_id的销售额最高的类别。
我无法使row_number()或分区正常工作,因为我需要通过item_price相对于item_category相对于买方的总和进行排序。我忽略了什么明显的东西吗?
答案 0 :(得分:0)
这里需要几层捏造:
SELECT buyer_id, item_sum, item_category
FROM (
SELECT buyer_id,
rank() OVER (PARTITION BY buyer_id ORDER BY item_sum DESC) AS rnk,
item_sum, item_category
FROM (
SELECT buyer_id, sum(item_price) AS item_sum, item_category
FROM my_table
GROUP BY 1, 3) AS sub2) AS sub
WHERE rnk = 1;
在sub2
中,您计算了' item_price'的总和。对于每个" item_category'对于每个'buyer_id'。在sub
中,您可以通过' buyer_id'对这些窗口功能进行排名,按照项目顺序排序'按降序排列(所以最高的' item_sum'首先出现)。在主查询中,选择rnk = 1
。