1. ホーム
  2. sql

[解決済み] postgresql でクエリ結果を月と年によってグループ化する

2022-02-17 22:36:48

質問

Postgresサーバーに以下のデータベース・テーブルがあります。

id      date          Product Sales
1245    01/04/2013    Toys    1000     
1245    01/04/2013    Toys    2000
1231    01/02/2013    Bicycle 50000
456461  01/01/2014    Bananas 4546

を与えるクエリを作成したいと思います。 SUMSales 列を作成し、以下のように月と年ごとに結果をグループ化します。

Apr    2013    3000     Toys
Feb    2013    50000    Bicycle
Jan    2014    4546     Bananas

簡単な方法はないのでしょうか?

どのように解決するのですか?

select to_char(date,'Mon') as mon,
       extract(year from date) as yyyy,
       sum("Sales") as "Sales"
from yourtable
group by 1,2

ラドゥのリクエストで、そのクエリを説明します。

to_char(date,'Mon') as mon, : date"属性を月の短縮形の定義された書式に変換します。

extract(year from date) as yyyy : Postgresql の "extract" 関数は "date" 属性から YYYYY 年を抽出するために使用されます。

sum("Sales") as "Sales" : SUM() 関数は、すべての "Sales" 値を合計し、ダブルクォートを使用して大文字と小文字の区別をするエイリアスを提供します。

group by 1,2 : GROUP BY 関数は、SELECT リストから集約の一部ではないすべての列(別名、SUM/AVG/MIN/MAX などの関数内にないすべての列)を含む必要があります。これは、SUM()が各列のユニークな組み合わせ(この場合は月と年の列)に対して適用されるべきことをクエリに伝えます。しかし、読みやすさを考えると、完全な"to_char(...)"と"extract(...)"式を使用することが最善でしょう。