mysql:6817
From: Shinya Kawaji <Shinya Kawaji <kawaji@xxxxxxxxxx>>
Date: Thu, 09 Jan 2003 16:51:10 +0900
Subject: [mysql 06817] Re: 日付型の条件検索について
かわじ、です。 ちょっと引用が長いですが・・・ > table1 は、 > > f_date_time|aaa|bbb|ccc|ddd|eee|fff > ―――――+――+――+――+――+――+―― > 2003-01-01| 0 | 1 | 0 | 1 | 2 | 4 | 1 > 2003-01-02| 0 | 3 | 0 | 0 | 2 | 1 | 1 > 2003-01-03| 3 | 0 | 4 | 7 | 3 | 4 | 0 > 2003-01-04| 0 | 2 | 0 | 0 | 2 | 2 | 1 > ・ > ・ > と、5年分の日付データとそれぞれ数字が入っております。 > > table2 は、 > > f_name|f_code > ―――+――― > あいうえお| aaa > かきくけこ|bbb > さしすせそ|ccc > たちつてと| ddd > なにぬねの|eee > はひふへほ| fff > > となっております。 > > 結果として、ブラウザに、 > > |1日|2日|3日|・・・・ > あいうえお| 0 | 0 | 3 | > かきくけこ| 2 | 1 | 3 | > さしすせそ| 0 | 0 | 3 | > ・ > ・ > と、言った感じのテーブル構造で表示したいのですが、 > よく分かりません。 > > どなたか教えて頂けないでしょうか? 私の理解では、普通、「他のテーブルのフィールド名をデータとして入れる」 ことはしません。 入れるとしたら、「他のテーブルのデータ」です。 上記の場合でしたら、table1をまず、以下のようにする方が 良いと思いますが、いかがでしょう?(table3としています) mysql> select * from table3; +------+-------------+--------+-------+ | f_id | f_date_time | f_code | f_num | +------+-------------+--------+-------+ | 1 | 2003-01-01 | bbb | 1 | | 2 | 2003-01-01 | ddd | 1 | | 3 | 2003-01-01 | eee | 2 | | 4 | 2003-01-01 | fff | 4 | | 5 | 2003-01-02 | bbb | 3 | | 6 | 2003-01-02 | eee | 2 | | 7 | 2003-01-02 | fff | 1 | | 8 | 2003-01-03 | aaa | 3 | | 9 | 2003-01-03 | ccc | 4 | | 10 | 2003-01-03 | ddd | 7 | | 11 | 2003-01-03 | eee | 3 | | 12 | 2003-01-03 | fff | 4 | | 13 | 2003-01-04 | bbb | 2 | | 14 | 2003-01-04 | eee | 2 | | 15 | 2003-01-04 | fff | 2 | +------+-------------+--------+-------+ 15 rows in set (0.00 sec) こうしてあれば、f_nameとf_date_timeのクロス集計は、以下のように出来ます。 mysql> SELECT -> t2.f_name, -> SUM(IF(FIELD(t3.f_date_time,'2003-01-01'),t3.f_num,0)) as '1日', -> SUM(IF(FIELD(t3.f_date_time,'2003-01-02'),t3.f_num,0)) as '2日', -> SUM(IF(FIELD(t3.f_date_time,'2003-01-03'),t3.f_num,0)) as '3日' -> FROM -> table2 as t2 -> left join table3 as t3 using (f_code) -> GROUP BY -> t2.f_name -> ; +------------+------+------+------+ | f_name | 1日 | 2日 | 3日 | +------------+------+------+------+ | あいうえお | 0 | 0 | 3 | | かきくけこ | 1 | 3 | 0 | | さしすせそ | 0 | 0 | 4 | | たちつてと | 1 | 0 | 7 | | なにぬねの | 2 | 2 | 3 | | はひふへほ | 4 | 1 | 4 | +------------+------+------+------+ 6 rows in set (0.00 sec) 実際には、上記のSELECT文は、表示させる日付の範囲に応じて適宜、 プログラム側で生成させる必要があるでしょう。 「クロス集計」についてはこちら。 http://www.mysql.gr.jp/mysqlml/search.cgi?ml=mysql&body=%A5%AF%A5%ED%A5%B9%BD%B8%B7%D7 # と書きましたが、上記のようなやり方で本当に良いのか、 # ちょっと自信なかったりして。 -- 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> ]