MySQLで同一カラムからのデータの取り出し方法

このQ&Aのポイント
  • MySQLを使用して同一カラムからのデータの取り出し方法について教えてください。テーブル(tb1)のdate列が10の場合と11の場合のcnt列の抽出を同時に行い、1つの表にまとめたいです。
  • MySQLで同一カラムからのデータの取り出し方法について教えてください。テーブル(tb1)のdate列が10の場合と11の場合のcnt列の抽出を同時に行い、1つの表にまとめたいです。
  • MySQLで同一カラムからのデータの取り出し方法について教えてください。テーブル(tb1)のdate列が10と11の場合のcnt列の抽出を同時に行い、1つの表にまとめたいです。
回答を見る
  • ベストアンサー

MySQLで同一カラムからのデーターの取り出し方法

お世話になります。 MySQL5.6使用です。 同一カラムからのデーターの取り出し方法について教えてください。 下記のようなテーブル(tb1)があります。  item  date cnt  aaa  10  100  bbb  10  100  ccc  10  100  aaa  11  90  bbb  11  80  ccc  11  70  aaa  12  60  bbb  12  50  ccc  12  40 date(列)が10の、cnt(列)の抽出は下記でできます。 select item,cnt from tb1 where date=10; <結果>  item  cnt  aaa  100  bbb  100  ccc  100 同じように、date(列)が11の、cnt(列)の抽出は下記でできます。 select item,cnt from tb1 where date=11; <結果>  item  cnt  aaa  90  bbb  80  ccc  70 この二つのコードを同時に行い 1つの表にする方法が知りたいです。 結果として得たい表は下記のとおりです。     cnt(date=10) cnt(date=11)  aaa  100      90  bbb  100      80  ccc  100      70 (※カラム名はasで変更できることは理解しています。) お手数をお掛けしますが、 よろしくお願いします。

  • ken123
  • お礼率73% (299/409)
  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5042/13171)
回答No.1

1度のSELECTで得る事は可能ですが、どちらかというと個別に取り出してプログラム側で処理する方が汎用的だと思いますね。 ========== SELECT  d10.item,  d10.cnt AS `cnt(date=10)`,  d11.cnt AS `cnt(date=11)` FROM  ( SELECT item, cnt FROM tb1 WHERE date=10 ) d10,  ( SELECT item, cnt FROM tb1 WHERE date=11 ) d11 WHERE  d10.item = d11.item ;

ken123
質問者

お礼

t_ohta さま お礼の返信をしたつもりだったのですが 反映されていませんでした。 たいへお礼が遅くなり申し訳ございません。 お蔭さまでSQLも扱えるようになってきました。 今後ともよろしくお願いします。

関連するQ&A

  • SQL抽出順番

    SQLの質問なんですが 以下のSQLがあるとします。 select カラムA、カラムC from test_table where in ('AAA','BBB','CCC'); ※条件はカラムAの値を使用しています。 結果が AAA 111 BBB 222 CCC 333 と出るとします。 下のように条件を変えたとき where in ('BBB','CCC','AAA'); BBB 222 CCC 333 AAA 111 と抽出と変わるようにしたいのですが、 (in句の左から順番にレコードが抽出したいです) 何か良い方法はありますでしょうか? rowid順で出力されてしまうのでしょうか? 以上です。 よろしくお願いします。

  • SQLでご助言いただきたく。

    テーブル名:AAA カラム: 'fname' ,ename テーブル名:BBB カラム: "id",fcode テーブル名:CCC カラム : "id",'fname',date 上記三つのテーブルAAA,BBB,CCCにそれぞれカラムがあります。 最終的に ename fcode date の3カラムを結合した状態でSELECTします。 ただし、条件として AAAのfname列とCCCのfname列を紐付けし、尚且つ BBBのid列とCCCのid列を紐付けし、尚且つ CCCのdate列が2012-10-31以上のものだけをSELECTしたいです。 上記を踏まえて下記二点ご質問致します。 (1)私が考えたSQL文は select a.ename ,bc.fcode ,bc.date from AAA a , (select b.fcode ,c.fname ,c.date from BBB b , CCC c where b.id = c.id and c.date >= '2012-10-31' ) bc where a.fname = bc.fname ; です。先にBBBとCCCから紐付けしその結果とAAAを紐付けしています。 このSQL文で間違いがないかどうか判定していただきたく。 (2)もっとスマートな書き方(短く書けるなど)がありましたら、 ご助言いただきたく。 ちなみにデータベースはオラクル仕様です。 宜しくお願い致します。

  • MYSQLで全てのカラムから検索する。

    tbというテーブルのbangというカラムに4が含まれていれば表示というのは select * from tb where (bang) like '%4%' ; という形になりますが、このtbテーブルにさらにname,tukiというカラムがあったとして カラムに関係なくレコードのどこかに4が入っていれば抽出するというSQL文が書きたいです。 select * from tb where bang like '%4%' or name like '%4%' or tuki like '%4%' ; と書くことで何とか今まではやってきたのですが、カラム数が増えてきてしまったので、ものすごく長いSQL文なってしまいました。 もう少しスマートにする方法はありませんか?

    • ベストアンサー
    • MySQL
  • 異なる二つのテーブルの結合について・・・

    お世話になっております。 ちょっとややこしい質問になります。 「1」 Aと言うテーブルのAAと言うカラムから、$AAAと言うレコードを抽出致しました。ここまでは出来ました。(ここでの抽出結果を$CCCと致します。) 「2」 「1」の抽出結果($CCC)を元に、Bと言うテーブルのBBと言うカラムから、BBBと言うレコードも抽出し結合したいと考えております。 一番の問題は、「1」で出た結果(CCC)を元に、抽出する事が出来ません。 「1」のソースのみ完成してます。 $rs=$DB->query("SELECT * FROM `A` WHERE AA = '$AAA' ↑の抽出結果=$CCCを元に↓ $rs=$DB->query("SELECT * FROM `B` WHERE BB = '$CCC' 結合させたいんです!! セクションしているので結合できないとバラバラになってしまいます。。。。 ご教示お願い致します! inner join を使うのは分かるのですが・・・進めません。(泣)

    • ベストアンサー
    • MySQL
  • 複数のテーブルの全てのカラムを一度に検索するには?

    検索対象のカラムがid(主キー)、bc1~bc40と41個あります。 1つのテーブルに41個のカラムを作り検索させると非常に時間がかかります。 それにインデックスを全部に付けたいですが16個までしかつけられないです。 なので、5つのテーブルにカラムを分けて全部のカラムにインデックスをつけて それぞれを検索させようと思っています。 テーブルが1つだけなら SELECT * FROM `bc` WHERE `bc1`='あいうえおかき' AND `bc2`='あいうえおかき' AND `bc3`='あいうえおかき' AND ・・・ `bc39`='あいうえおかき' AND `bc40`='あいうえおかき' ORDER BY `bc33` DESC LIMIT 0,50; のようにできますが、テーブルが複数の場合はどうしたらよいのでしょうか。 検索を試す前に下記ができるか試してみました。 SELECT COUNT(*) FROM (((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id`) INNER JOIN `eee` ON `ccc`.`id`=`eee`.`id` エラーにはなりませんがカウント数が0になってしまいました。 SELECT COUNT(*) FROM (`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id` これは正確にできてカウント数100000 SELECT COUNT(*) FROM ((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id` 4つ目のテーブルを入れたところから無理なようです。 他に良い方法はないのでしょうか。

    • ベストアンサー
    • MySQL
  • SQL文について

    TBL_A カラム1 |カラム2 |カラム3 |カラム4 | ---------|---------|---------|---------| 1    |AAA   |N    |1    | ---------|---------|---------|---------| 2    |AAA   |G    |1    | ---------|---------|---------|---------| 3    |BBB   |N    |0    | ---------|---------|---------|---------| 4    |CCC   |N    |0    | ---------|---------|---------|---------| TBL_B カラム1 |カラム2 | ---------|---------| AAA   |2    | ---------|---------| BBB   |0    | ---------|---------| CCC   |1    | ---------|---------| 上記のテーブル、TBL_A、TBL_Bがあるとします。 TBL_Aからカラム3='N'を抽出し、TBL_Bのカラム2でソートしたいのですが、 可能でしょうか? 結果 ---------|---------| BBB   |0    | ---------|---------| CCC   |1    | ---------|---------| AAA   |2    | ---------|---------| …となって欲しいのですが。。。 select TBL_A.カラム2 from TBL_A, TBL_B where TBL_A.カラム3='N' order by TBL_B.カラム2 では、うまくいきませんでした。 ※ TBL_A、TBL_Bは共にカラム1がキー値です。

  • カラム名を全て出力したいのですが。

    カラム名の出力について質問です。 Oracle9iでテーブルを選択してみました。 データ内容は以下のとおりです。 <AAAテーブル> aaa : CHAR 8 bbb : CHAR 1 ccc : CHAR 10 ddd : CHAR 2 eee : CHAR 3 すると結果がこうなりました。 select * from AAA; aaa b ccc dd eee  ←すいません、下の下線に合わせて文字があります。 -------- - ---------- -- --- 11111 1 1111111111 11 111 カラム名が短縮されてしまっているのですが、 これを全て出力(例えばbbbというように出力)出来るようにするには どのようにしたら良いのでしょうか? よろしくお願いいたします。

  • カラム名を全て表示したいのですが・・・。

    カラム名の出力について質問です。 Oracle9iでテーブルを選択してみました。 データ内容は以下のとおりです。 <AAAテーブル> aaa : CHAR 8 bbb : CHAR 1 ccc : CHAR 10 ddd : CHAR 2 eee : CHAR 3 すると結果がこうなりました。 select * from AAA; aaa b ccc dd eee  ←すいません、下の下線に合わせて文字があります。 -------- - ---------- -- --- 11111 1 1111111111 11 111 カラム名が短縮されてしまっているところで これを全て出力(例えばbbbというように出力)出来るようにするには col bbb format a3 col ddd format a3 というように見出し列の幅を数字で指定するということは 教えてもらったのですが、テーブルのカラム数が多くて困っています。 カラムごとではなく、sqlplusのSET等である程度まとめて 設定する事は出来ないでしょうか? 教えてください、よろしくお願いいたします。

  • mysqlで横方向ではなく縦方向の条件抽出は…

    id   hoge   num 01   AAA   0 01   BBB   1 02   AAA   1 03   BBB   0 というテーブルがあったとします。 select id from table where hoge='AAA' and num=0 のような条件で検索するのは普通ですが、 カラムではなくレコード単位で見て hogeの値がAAAとBBBの両方である場合のデータとして「01」というidのみを抽出する方法はないものでしょうか。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysqlのcountの挙動

    mysqlのcountの挙動について教えてください! tableの内容 id,temp_id,sex,create_date 1,aaa,1,2009-01-01 00:00:00 2,bbb,1,2009-01-02 00:00:00 3,bbb,1,2009-01-02 00:00:00 4,ccc,1,2009-01-03 00:00:00 5,ccc,1,2009-01-03 00:00:00 6,ccc,1,2009-01-03 00:00:00 実現したいことは単純で日付を参照し 2009-01-01であればsex=1は1件 2009-01-02であればsex=1は2件 2009-01-03であればsex=1は3件 と表示させたくforeach内で以下のソースで試したのですがうまく取得 できず任意の日付が2009-01-03であっても結果が1となってしまいます。 ※$val2には任意のY-m-d形式の配列の値が入ります。 $res =& $mdb2->query("SELECT Count(sex) AS cnt FROM table WHERE DATE_FORMAT(create_date, '%Y-%m-%d') = '" . mysql_real_escape_string($val2) . "' && sex = '" . mysql_real_escape_string(1) . "' GROUP BY temp_id"); while ($row = $res->fetchRow()) { $data[$key]['man'] = $row['cnt']; }

    • 締切済み
    • PHP