[前][次][番号順一覧][スレッド一覧]

mysql:6822

From: Shinya Kawaji <Shinya Kawaji <kawaji@xxxxxxxxxx>>
Date: Thu, 09 Jan 2003 19:20:38 +0900
Subject: [mysql 06822] Re: 日付型の条件検索について

かわじ、です。


> やってみないと分からないと思い、table3のやり方で現在奮闘中です。
> 
> table3のやり方だと、table2 に、新たにデータを更新すると、
> もちろんtable3にもデータが更新されるのですが、
> 更新するたんびに、日付データ(5年分)が入るって事ですよね?
> 
> 何かいっぺんに5年分のデータをINSERTするSQL文ってあるのでしょうか?
> 現在、5年分の日付データを配列に入れて、ループにして1個づつINSERT
> してます。
> 
> 日付データだけ新たにテーブルを作ったら?との声がかかりそうですが、
> 現在の方法でなんとかしたいと思います。

table2 って、人名とコードの対応ですよね?
人名を増やすことと、「table3(日別の、コードとカウント数の対応)の
内容を全て一新する」ことの関係がよく分からないのですが・・

それはともかく、あのやり方は、
「今後 table1 は table3 に置き換える(更新も含めて)」という前提なので、
table1 形式でいくのなら、以下のようなやり方でどうでしょう。
SQLが2回に分かれますし、さらに先ほど、table3の話をしておきながら
申し訳ないのですが。


まず、最初に table2 の内容を、プログラムの変数(ハッシュか配列)に
入れておきます。これはこの次のSQLを生成するためのものです。

mysql> SELECT
    ->   *
    -> FROM
    ->   table2;
+------+------------+--------+
| f_id | f_name     | f_code |
+------+------------+--------+
|    1 | あいうえお | aaa    |
|    2 | かきくけこ | bbb    |
|    3 | さしすせそ | ccc    |
|    4 | たちつてと | ddd    |
|    5 | なにぬねの | eee    |
|    6 | はひふへほ | fff    |
+------+------------+--------+
6 rows in set (0.00 sec)


次に、table1 の内容を月別に集計します。
EXTRACT(YEAR_MONTH FROM time) を使います。

最も単純なのは、他の方もおっしゃっているように、SELECT文では月別を
縦列にして、出力時に縦横変換するものです。
sum(...) as ... の部分は、先ほどの変数を使って生成します。

mysql> SELECT
    ->   EXTRACT(YEAR_MONTH FROM f_date_time) as month,
    ->   sum(aaa) as 'あいうえお',
    ->   sum(bbb) as 'かきくけこ',
    ->   sum(ccc) as 'さしすせそ',
    ->   sum(ddd) as 'たちつてと',
    ->   sum(eee) as 'なにぬねの',
    ->   sum(fff) as 'はひふへほ'
    -> FROM
    ->   table1
    -> GROUP BY
    ->   month
    -> ORDER BY
    ->   month;
+--------+------------+------------+------------+------------+------------+------------+
| month  | あいうえお | かきくけこ | さしすせそ | たちつてと | なにぬねの | はひふへほ |
+--------+------------+------------+------------+------------+------------+------------+
| 200301 |          3 |          6 |          4 |          8 |          9 |         11 |
+--------+------------+------------+------------+------------+------------+------------+
1 row in set (0.00 sec)


これを、SQLで縦横逆にすることも可能かもしれませんが、かなり複雑なものに
なりますので、プログラム側で考えた方が楽だと思います。

--
Shinya Kawaji



[前][次][番号順一覧][スレッド一覧]

      6807 2003-01-08 22:03 [<lavlav@xxxxxxxxxx> ] Re: 日付型の条件検索について            
      6817 2003-01-09 16:51 ┣[Shinya Kawaji <kawaj]                                       
      6820 2003-01-09 18:12 ┃┗[<lavlav@xxxxxxxxxx> ]                                     
->    6822 2003-01-09 19:20 ┃ ┗[Shinya Kawaji <kawaj]                                   
      6818 2003-01-09 17:38 ┗[谷中 <yanakas@xxxxxx]                                       
      6819 2003-01-09 18:03  ┗[<lavlav@xxxxxxxxxx> ]