2

状況:

販売レコードを含むデータベースがあり、各レコードには ID (PK)、ProductCode、Year、Month、SalesVolume があります。

ユーザーとして年を指定するので、1980 を指定すると、その年に対応するすべてのレコードをデータベースに照会します。

指定された年の月の SalesVolumes を合計し、上位 5 つの販売量の値を選択するクエリを作成しようとしています。

私がこれまでに集めたのは、上記のことを何らかの方法で実行してから、上位 5 つの販売量の値を選択し、それらを降順に並べて、上位 5 つを選択することですが、それは私が得た限りです。

1 年に複数の製品の 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 に答える