情况:
我有一个包含销售记录的数据库,每个记录都有一个ID(PK),ProductCode,Year,Month,SalesVolume。
作为用户,我将指定年份,因此如果我指定1980年,我将在数据库中查询与该年份相对应的所有记录。
我正在尝试创建一个总计指定年份的SalesVolumes月份的查询,然后选择前5个销售量值。
到目前为止我收集到的是以某种方式执行上述操作,然后选择前5个销售量值,按降序排列,并选择前5个,但这就是我所拥有的
请注意,一年内会有多个产品的SalesVolumes:
ID, Product Code, Year, Month, SalesVolume
23041 121 1980 1 21
23042 121 1980 2 960
23043 121 1980 3 939
23044 121 1980 4 927
23045 121 1980 5 931
23046 121 1980 6 950
23047 121 1980 7 975
23048 121 1980 8 994
23049 121 1980 9 994
23050 121 1980 10 968
23051 121 1980 11 918
23052 121 1980 12 854
23425 122 1980 1 1002
23426 122 1980 2 1032
23427 122 1980 3 1090
23428 122 1980 4 1062
23429 122 1980 5 1010
23430 122 1980 6 1103
23431 122 1980 7 1214
23432 122 1980 8 1122
23433 122 1980 9 1019
23434 122 1980 10 1181
23435 122 1980 11 1343
23436 122 1980 12 1180
预期产出:
1980年
Product Code, SalesVolume
121 , (total SalesVolume of the 12 months)
122 , (total SalesVolume of the 12 months)
答案 0 :(得分:3)
以下是您可以执行的操作 - 将给定年份的每件商品的销售额总计,对其进行排名,然后选择排名前5位的商品。
SELECT *
FROM (
SELECT "Product Code",
SUM(SalesVolume) as total,
RANK() OVER (ORDER BY SUM(SalesVolume) DESC) as rnk
FROM YourTable
WHERE Year = 1980
GROUP BY "Product Code"
) A
WHERE rnk <= 5
如果您想要选择所有年份的前5名,您也可以这样做:
SELECT *
FROM (
SELECT Year,
"Product Code",
SUM(SalesVolume) as total,
RANK() OVER (PARTITION BY Year ORDER BY SUM(SalesVolume) DESC) as rnk
FROM YourTable
GROUP BY Year, "Product Code"
) A
WHERE rnk <= 5