問題:
データを年ごとにグループ化する必要があります。
例I:
データの列の1つはtransaction_date
です。 。日付が含まれています。すべてのデータを年ごとにグループ化し、毎年獲得した合計金額を計算したいとします。
data
テーブルは次のようになります:
transaction_date | お金 |
---|---|
2018-03-25 | 1700 |
2019-09-12 | 100 |
2018-07-14 | 1200 |
2018-01-05 | 400 |
2019-06-08 | 2000 |
2020-03-06 | 1500 |
解決策1(年と稼いだお金を表示):
SELECT YEAR(transaction_date) AS year, SUM(money) AS money_earned FROM data GROUP BY YEAR(transaction_date);
結果は次のとおりです。
year | money_earned |
---|---|
2020 | 1500 |
2019 | 2100 |
2018 | 3300 |
ソリューション2(完全な日付、年、および対応する年に稼いだお金を表示します):
SELECT transaction_date AS transaction_date, YEAR(transaction_date) AS year, SUM(money) OVER(PARTITION BY YEAR(transaction_date)) AS money_earned FROM data;
結果は次のとおりです。
transaction_date | 年 | money_earned |
---|---|---|
2018-03-25 | 2018 | 3300 |
2018-07-14 | 2018 | 3300 |
2018-01-05 | 2018 | 3300 |
2019-09-12 | 2019 | 2100 |
2019-06-08 | 2019 | 2100 |
2020-03-06 | 2020 | 1500 |
ディスカッション:
この例では、年の列がないと想定しています。完全な日付の列があり、そこから年を取得したいと考えています。
SQL Serverの日付から年を取得するには、YEAR()
を使用できます。 働き。この関数の引数は日付である必要があります–ここでは、transaction_date
列。
年とその年に獲得した合計金額を表示する場合は、GROUP BY
を使用できます。 。最初に選択された列は、日付から抽出された年です。 2番目の列は、集計関数SUM(money)
です。 。クエリの最後に、GROUP BY
が必要です。 YEAR(transaction_date)
。したがって、ソリューション1。
より多くの列を表示したい場合は、ウィンドウ関数を使用します(ソリューション2)。 SUM(money)
の後 OVER()
を記述します 句と、毎年グループ化するため、PARTITION BY YEAR(transaction_date)
を使用します その中。 year
はまだないことに注意してください 合計を数えるときの列なので、PARTITION BY
年は機能しません。ウィンドウ関数の詳細については、こちらをご覧ください。
例II:
データの列の1つはyear
です 。この列ですべてのデータをグループ化し、毎年獲得した合計金額を計算します。
data
テーブルは次のようになります:
year | 月 | 日 | お金 |
---|---|---|---|
2018 | 3 | 25 | 1700 |
2019 | 9 | 12 | 100 |
2018 | 7 | 14 | 1200 |
2018 | 1 | 5 | 400 |
2019 | 6 | 8 | 2000 |
2020 | 3 | 6 | 1500 |
解決策1(年と稼いだお金を表示):
SELECT year, SUM(money) AS money_earned FROM data GROUP BY year;
結果は次のとおりです。
year | money_earned |
---|---|
2020 | 1500 |
2018 | 3300 |
2019 | 2100 |
ソリューション2(年、月、日、および対応する年に稼いだお金を表示):
SELECT year, month, day, SUM(money) OVER(PARTITION BY year) AS money_earned FROM data;
結果は次のとおりです。
year | 月 | 日 | money_earned |
---|---|---|---|
2018 | 3 | 25 | 3300 |
2018 | 7 | 14 | 3300 |
2018 | 1 | 5 | 3300 |
2019 | 9 | 12 | 2100 |
2019 | 6 | 8 | 2100 |
2020 | 3 | 6 | 1500 |
ディスカッション
この例では、すでにyear
があることを前提としています。 列。
年とその年に獲得した合計金額のみを表示する場合は、単純なGROUP BY
十分です。 GROUP BYの概念に慣れていない場合は、ここで説明しているところをご覧ください。集計関数を使用するだけです(ここでは:SUM
)正しい列を使用し、クエリの最後にyear
でグループ化します 。 AS
を使用して列の名前を変更できます 新しい名前のキーワード。また、データを年で並べ替える場合は、ORDER BY
を使用します クエリの最後の年。
他の列も表示したい場合は、さらに複雑になります。次に、ウィンドウ関数を使用したソリューションが必要です(ソリューション2)。適切な列(SUM(money)
で集計関数を使用する必要があります )そしてOVER()
を書きます その後の条項。この句では、PARTITION BY
を使用する必要があります グループ化する列を使用します。それがあなたが得る方法です:
SUM(money) OVER(PARTITION BY year)
このソリューションでは、GROUP BY
を使用しません 条項。
ウィンドウ関数の詳細については、こちらをご覧ください。