ありふれた作業のはずが、ネットで検索しても Oracle以外には見つからなかったのでやってみた。
金額を「顧客番号・年月」毎に集計したい - Database Expert
ポイントは例えば2007/01/12から2007/01の文字列を取り出すためにEXTRACT()関数を使ったこと。「初めてのSQL(オライリー)」によれば、日付関数はいろいろあるが、いくつもの関数を覚えるよりも一つの関数の使い方をいくつか覚えた方が楽だそうだ。
■データ
顧客 売上 販売日時
A 500 2007/01/12
B 400 2007/02/26
C 1200 2007/03/23
D 1500 2007/03/25
■テーブル(list)の作成
CREATE TABLE sales( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY; client VARCHAR(50) NOT NOULL, sales INT NOT NULL, date DATE NOT NULL );
■データの登録
INSERT INTO list(client, sales, date) VALUE('A', '500', '2007/01/12'); INSERT INTO list(client, sales, date) VALUE('B', '400', '2007/02/26'); INSERT INTO list(client, sales, date) VALUE('C', '1200', '2007/03/23'); INSERT INTO list(client, sales, date) VALUE('D', '1500', '2007/03/25');
■登録データの一覧表示(idの小さい順に表示する)
SELECT * FROM list ORDER BY id ASC;
■月ごとの集計表示
SELECT EXTRACT(YEAR_MONTH FROM date), SUM(sales) FROM list GROUP BY EXTRACT(YEAR_MONTH FROM date);
■結果
200701 | 500
200702 | 400
200703 | 2700
トップページに戻る