2

情况:

我有一个包含销售记录的数据库,每条记录都有一个 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)
4

1 回答 1

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
于 2012-05-03T20:14:38.783 回答