[PHP-users 18891]Re: 検索結果を横軸に配置するには?
Chie
gontakun_72 @ yahoo.co.jp
2003年 11月 13日 (木) 11:22:48 JST
Chie.Mです。
完全にSQLの内容になってしまって恐縮です。
> DB(postgres)に入力したデーターを
> 月別に横軸に配置したい
私がこのような処理を行う場合は、ほぼSQLで処理をしています。
あまりスマートなやり方ではないかもしれませんが。。。
まず、下記のようなテーブルを作ります。
--------
CREATE TABLE test_table (
test_date date,
test_data text
);
INSERT INTO test_table VALUES('2003-9-9','曇');
INSERT INTO test_table VALUES('2003-9-1','雨');
INSERT INTO test_table VALUES('2003-9-12','晴');
INSERT INTO test_table VALUES('2003-9-21','雨');
INSERT INTO test_table VALUES('2003-10-6','晴');
INSERT INTO test_table VALUES('2003-10-11','曇');
INSERT INTO test_table VALUES('2003-10-25','雨');
INSERT INTO test_table VALUES('2003-10-29','晴');
INSERT INTO test_table VALUES('2003-11-3','曇');
INSERT INTO test_table VALUES('2003-11-16','雨');
INSERT INTO test_table VALUES('2003-11-27','晴');
--------
月ごとに、見出しをつけてグループ化します。
--------
SELECT test_data,
CASE WHEN extract(month from test_date)=9
THEN extract(day from test_date)
END AS September,
CASE WHEN extract(month from test_date)=10
THEN extract(day from test_date)
END AS October,
CASE WHEN extract(month from test_date)=11
THEN extract(day from test_date)
END AS November
FROM test_table
GROUP BY test_data,September,October,November;
--------
上記のSQLで、下記のような表ができます。
test_data|September|October|November|
雨 | 1 | | |
雨 | 21 | | |
雨 | | 25 | |
雨 | | | 16 |
晴 | 12 | | |
晴 | | 6 | |
晴 | | 29 | |
晴 | | | 27 |
・・・・
月ごとに同じ天気の日数は変わりますので、どうしてもNULLの欄が
できてしまいます。
しかし、実際にやりたい事が下記のようなことなら、
集計関数を使えばNULLの欄はなくなります。
> (例)アイスクリームの月毎の販売数量を月毎に
> 横並びで表示させたい。
表示させる値は、月ごとの合計値などですよね。
今回の例でしたら、同じ天気の月間日数をカウントすることでできます。
--------
SELECT test_data,
COUNT(CASE WHEN extract(month from test_date)=9
THEN test_date
END) AS September,
COUNT(CASE WHEN extract(month from test_date)=10
THEN test_date
END) AS October,
COUNT(CASE WHEN extract(month from test_date)=11
THEN test_date
END) AS November
FROM test_table
GROUP BY test_data;
--------
test_data|September|October|November|
雨 | 2 | 1 | 1 |
晴 | 1 | 2 | 1 |
曇 | 1 | 1 | 1 |
上記は3か月分ですが、1年分のカラムを用意しておけば、
1年分の表を作る事ができます。
工夫すれば複数年でも可能です。
いかがでしょうか?
では、頑張ってください。
--
Chie <gontakun_72 @ yahoo.co.jp>
PHP-users メーリングリストの案内