• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLで関連したデータを横に並べたい)

MySQLで関連したデータを横に並べたい方法

このQ&Aのポイント
  • MySQLを使用して、関連したデータを横に並べる方法について詳しく説明します。
  • テーブル内のデータを指定の形式で整理するために、CONCAT関数を使用します。
  • ただし、重複するデータについては適切な条件を指定する必要があります。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

あ、よくよく考えたらこの程度ならピボットしなくてもかけますね ピボットの場合もう少し複雑な集計をとるとき便利です。 もちろん今回のケースでも活用できます //例 select bang ,max(if(tuki=4,name,null)) as 4月 ,max(if(tuki=5,name,null)) as 5月 ,max(if(tuki=6,name,null)) as 6月 from tb as t group by bang order by bang; //ちなみに2名以上いるときの列記 select bang ,group_concat(if(tuki=4,name,null)) as 4月 ,group_concat(if(tuki=5,name,null)) as 5月 ,group_concat(if(tuki=6,name,null)) as 6月 from tb as t group by bang order by bang; //各bangに月ごと何人いるかカウントする select bang ,sum(tuki=4) as 4月 ,sum(tuki=5) as 5月 ,sum(tuki=6) as 6月 from tb as t group by bang order by bang;

nkyfm
質問者

お礼

おお!うまく表示されました!文字列にMAXって使えたんですね……。 2名以上や人数のカウントも勉強になりました! ピボットテーブルもしっかり頭に入れておきます! ありがとうございました! 助かりました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

この手の処理にはピボットテーブルを使うと処理が楽です //元データ create table tb (bang varchar(10),name varchar(10),tuki int); insert into tb values('A103','佐藤',4),('A102','高橋',5),('A104','鈴木',4),('A101','中川',4),('A103','渡辺',5),('A101','西沢',5),('A102','中村',6),('A104','田中',5),('A103','村井',6),('A107','吉田',6),('A101','小林',4); //ピボットテーブル create table pivot(month int,m4 int null,m5 int null,m6 int null); insert into pivot(month,m4) values(4,1); insert into pivot(month,m5) values(5,1); insert into pivot(month,m6) values(6,1); //結果 select bang ,max(if(m4,name,null)) as 4月 ,max(if(m5,name,null)) as 5月 ,max(if(m6,name,null)) as 6月 from tb as t inner join pivot as p on t.tuki=p.month group by bang order by bang;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • よくある名字なのに、同級生に一人もいなかったのは?

    下記は、日本の多い名字ベストテンです。  (1)佐藤 (2)鈴木 (3)高橋 (4)田中 (5)渡辺 (6)伊藤 (7)山本 (8)中村 (9)小林 (10)斉藤 この中で、あなたの幼稚園から高校までの同級生に一人もいたことがなかった名字は、どれですか? 因みに私の場合は、どの名字の同級生もいましたが、男性の(1)佐藤、女性の(6)伊藤(8)中村(9)小林は、一人もいませんでした。

  • エクセルで2つのリストを統合するには?

    エクセルの別々のシートにある2つのリストを統合したいのですが、過去の質問などを見てもうまくいきません。具体的には 【表1】 番号 氏名 住所 A 佐藤 東京 B 高橋 神奈川 C 渡辺 埼玉 D 田中 千葉 E 小林 山梨 【表2】 番号 氏名 年齢 B 高橋 22 D 田中 45 という2つの表で、これを 番号 氏名 住所 年齢 A 佐藤 東京 B 高橋 神奈川 22 C 渡辺 埼玉 D 田中 千葉 45 E 小林 山梨 のようにまとめたいのです。 「データの統合」を使ってみましたがうまくいきませんでした。よろしくお願いします。

  • MYSQLであるレコードを取得したいのですが

    MYSQL5.0.33を使用しています。 今「ID(primary key)」「name」の二つのカラムのテーブルがあり、そのレコードの中から2の倍数と3の倍数のレコードをそれぞれ取得したいのです。 しかし、レコードが削除される可能性があり、なるべく均等に取得することができません。 ================= (例) 1 佐藤 2 鈴木 3 (削除されたレコード) 4 田中 5 小林 6 (削除されたレコード) 7 阿部 8 吉田 9 (削除されたレコード) ================= 上記のような状態ですと、3の倍数のレコードは一つも取得できません。 素人の感覚的な話になってしまうのですが、 ================= (例) 1 佐藤 2 鈴木 3 田中 4 小林 5 阿部 6 吉田 ================= このような感じにして、 「2の倍数は『鈴木』『小林』『吉田』」 「3の倍数は『田中』『吉田』」 で取得はできないものかと思い質問させて頂きました。 できなければ、何か方法や苦肉の策等ありましたらご教授頂けませんでしょうか。 どうか宜しくお願い致します!

  • 佐藤選手、鈴木選手、高橋選手、田中選手、伊藤選手

    佐藤選手、鈴木選手、高橋選手、田中選手、伊藤選手、山本選手、渡辺選手、中村選手、小林選手、加藤選手・・・ 全国の名字ランキングベスト10の、それぞれまず最初に頭に浮かぶスポーツ選手を上げてみてください。 また、この中で意外と直ぐには思いつかなかった名字はどれでしたか? 因みに私は昔から、一番多い割に佐藤姓のスポーツ選手が少ないと感じていましたが。。。

  • X個グループからY個ずつデータを抽出したい

    例:グループの数は100ぐらいがあって、グループごとのレコード数はそれぞれであり、毎回そのうちのX(例3)グループずつにデータを抽出します。そして1つのグループから最大Y個(例2)のデータを抽出します。 抽出したデータにフラグを立てて、次の抽出時に除外の条件として使います。 例:以下のテーブルがあって、毎回3グループから2個のデータを抽出します: group name flag ---------------------------------------------------------------------------- 1_group 田中A          0     1_group 佐藤A          0     1_group 林A           0     1_group 鈴木A           0     1_group 牧野A           0     2_group 平田B          0     2_group 小林B          0     ・・・ 3_group 高橋C          0     3_group 丹羽C          0     3_group 田中C          0     3_group 佐藤C          0     3_group 鈴木C          0     3_group 吉田C          0     ・・・ 4_group 高橋D          0     4_group 丹羽D          0     4_group 田中D          0     4_group 佐藤D          0     4_group 鈴木D          0     ・・・ (1)1回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 田中A          0     1_group 佐藤A          0     2_group 平田B          0     2_group 小林B          0     3_group 高橋C          0     3_group 丹羽C          0     (2)2回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 林A           0     1_group 鈴木A           0     3_group 田中C          0     3_group 佐藤C          0     4_group 高橋D          0     4_group 丹羽D          0     (3)3回目の抽出の結果 group name flag ---------------------------------------------------------------------------- 1_group 牧野A           0     3_group 鈴木C          0     3_group 吉田C          0     4_group 田中D          0     4_group 佐藤D          0     DBはSqlLiteです。 長いですが、ご教授頂ければ、ありがたいです

  • ある列の値を自動的にずらしたい

    バージョン4.1.16を使っています。 jyunban(順番)を設けて、ある行が削除されたら それより後ろにある行全てのjyunbanを1つ前に繰り上げたいです。 id name jyunban 1 鈴木  1 2 吉田  2 3 加藤  3 4 田中  4 5 佐藤  5 6 高橋  6 7 渡辺  7 とあって、例えばid「2」とid「5」を削除した時に jyunbanの値を前に詰めたいのです。 id name jyunban 1 鈴木  1 3 加藤  2 4 田中  3 6 高橋  4 7 渡辺  5 これはトリガーなどを使わないと無理なのでしょうか? それともそもそもjyunban(順番)という列を使わずに これと同じような概念を作ることは可能なのでしょうか?

    • ベストアンサー
    • MySQL
  • Perl初心者です。同一データを数えるには

    perl 超!初心者です。同一データの数え上げ。 あまり上手く説明できませんがよろしくお願いします。 ある行から行までの同一データを数え上げる処理をしたいです。 例えば、以下のようなデータがあるとします。 --------------------- <NAME> 田中 佐藤 佐藤 山田 田中 <NAME> 佐藤 田中 渡辺 渡辺 佐藤 ------------------- while (<>){ $linecount{$_}++; } foreach $line (sort{$linecount{$b} <=> $linecount{$a}}keys%linecount) { print $linecount{$line}," ",$line if($linecount{$line} >= 1); } これで、行の重複回数と、データを出力はできたのですが、 さらに、<NAME>で区切ってそれぞれの区分で同一データの数を数えていきたいです。結果としては <NAME> 2 田中 2 佐藤 1 山田 <NAME> 2 渡辺 2 佐藤 1 田中 と出力したいのですが、どうすればよいでしょうか?

    • ベストアンサー
    • Perl
  • この苗字で誰を思い浮かべる?(くだらなくてすみません…)

    多い苗字ベストテンは 佐藤 鈴木 高橋 田中 渡辺 伊藤 山本 中村 小林 加藤 (敬称略) だそうですが、私はへそまがりなので11位~20位についてお聞きします(^^ この苗字で思い浮かぶ人は誰ですか? 吉田  山田 佐々木 山口 松本 井上 斎藤 木村 林 清水  (上をコピーペーストしてお使いください) 例) (すべて敬称略) 吉田  くん (牛。吉田くんのお父さんと共に「俺たちひょうきん族」という番組に出演) 山田  五郎 (キューピーヘアー)  佐々木 小次郎 (燕返し) 山口  達也 (TOKIO) 松本  キヨシ (マツキヨ) 井上  マー (芸人) 斎藤  茂吉 (歌人。斎藤 茂太、北杜夫氏の父) 木村  祐一 (キム兄。キム・ニールヤング) 林   真須美 (・・・神田川俊郎氏に似てる?) 清水  の次郎長 (苗字ではない?) アンケートですのでどちらさまもお気軽にどうぞ!(^o^)/

  • エクセルでこういうときは・・・?

    book1は   A B 1 1-1 山田 2 1-2 田中 3 1-1 佐藤 4 1-2 加藤 5 1-3 高橋 6 1-2 武田 7 1-3 岡田 と、なっております。この表から book2で 1-1 1-2 1-3 山田 田中 高橋 佐藤 田中 高橋 佐藤 加藤 高橋 #N/A 加藤 高橋 #N/A 武田 高橋 #N/A 武田 岡田 #N/A #N/A 岡田 と、いう表を作りたいのです。が、ご覧のとおりうまくいっておりません。(>_<) 上の表の検索はVLOOKを使っています。 なにかよい方法を教えてください。お願いします。

  • 誰がいつからいつまでいくら売り上げたのか。

    よろしくお願いいたします。 A  B  C 1/1 佐藤 100 1/2 田中 120 1/2 佐藤 100 1/3 小林 140 1/5 小林 120 1/6 佐藤 100 上記のような表があったとき、 1/2~1/5までに佐藤さんがいくら売り上げたのかを調べる場合、 どう言った関数が一番シンプルに計算できるでしょうか。 よろしくお願いいたします。