我有两张table:
Sales
columns: (Sales_id, Date , Customer_id, Product_id, Purchase_amount):
Product
columns: ( Product_id, Product_Name, Brand_id,Brand_name)
我必须写一个查询来找出每年销售的前十名产品。我现在的问题是:
WITH PH AS
(SELECT P.Product_Name, LEFT(S.Date,4) "SYEAR", COUNT(S.Product_id) "Product Count"
FROM Sales S LEFT JOIN Product P
ON S.Product_Id=P.Product_Id
GROUP BY P.Product_Name, LEFT(S.Date,4)
SELECT P.Product_Name, "SYEAR", "Product_Count"
FROM (SELECT P.Product_Name, "SYEAR", "Product_Count",
RANK OVER (PARTITION BY "SYEAR" ORDER BY "Product_Count" DESC) "TEMP"
)
WHERE "TEMP"<=10
这似乎不是最优化的查询。你能帮我一下吗?能否有一个替代版本来获得所需的结果?
笔记
代码重复的主要原因是允许按年份分组。给定表中没有年度字段。
日期格式为:yyyymmdd(例如:20200630)
任何帮助都将不胜感激。提前谢谢
1条答案
按热度按时间ekqde3dh1#
可以将窗口函数与聚合结合起来:
从性能Angular 来看,这可能会生成一个与查询非常相似的执行计划。不过,这更简单。