こういうテーブル「tb」があるとします。
「tb」
bang nama tuki
A103 佐藤 4
A102 高橋 5
A104 鈴木 4
A101 中川 4
A103 渡辺 5
A101 西沢 5
A102 中村 6
A104 田中 5
A103 村井 6
A107 吉田 6
A101 小林 4
これを、実行後に、
bang 4月 5月 6月
A101 中川 西沢 NULL
A102 NULL 高橋 中村
A103 佐藤 渡辺 村井
A104 鈴木 田中 NULL
A107 NULL NULL 吉田
このように、共通するbangで並べ替えたいのです。
A101の4月は、「中川」と「小林」で重複していますが、
このときはひとりだけが選択されてほしいです。
SELECT
CONCAT(CASE
WHEN tuki='4' THEN name
ELSE IFNULL(null,'')
END) AS '4月',
~
GROUP BY bang
~
としても、
bang 4月 5月 6月
A101 中川
となってしまい、5月と6月が上手く表示されません。
よろしくお願いします。
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;
おお!うまく表示されました!文字列にMAXって使えたんですね……。
2名以上や人数のカウントも勉強になりました!
ピボットテーブルもしっかり頭に入れておきます!
ありがとうございました!
助かりました!
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 野球 世界一ですか 4 2022/11/11 06:17
- 野球 世界一ですか 2 2022/11/11 06:15
- 野球 日本代表 これで世界一ですか 2 2022/11/11 05:59
- タレント・お笑い芸人 食わず嫌い復活して欲しいですか? 1 2023/02/22 22:45
- その他(音楽・ダンス・舞台芸能) どの時代のミュージックステーションが一番豪華ですか? 86年 10月24日チェッカーズ、早見優、ジャ 2 2022/12/28 19:26
- 野球 この中で1番凄いのはどれ? 5 2022/12/31 17:30
- タレント・お笑い芸人 種なし 2 2022/06/22 00:30
- 野球 高校野球の話 1 2022/08/18 09:54
- 野球 WBC 1 2023/03/07 15:26
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数DBテーブルからのデータ取得
-
#1062 - '0' は索引 'PRIMARY' ...
-
PHPとMySQLを使った掲示板の作り方
-
MySQLのテーブル作成でハイフン...
-
ある時間以内の利用者の抽出に...
-
うまくいきません教えてくださ...
-
エラー 1068 (42000): 複数の主...
-
参考書に従って入力したつもり...
-
SQLでカラムを追加し、条件に合...
-
【初歩】ラジオボタンをつかっ...
-
テーブル名が可変の場合のクエ...
-
`picture` varchar(255) のコマ...
-
MySQL NULLだけをカウントして...
-
矛盾していないでしょうか?
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。
-
SQLです!!教えてください。
-
SQLです。あってますか?↓
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Null値が入れられない
-
NULLを含む列の足し算
-
MySQLの特定のカラムの内容を全...
-
nullと同じく空白をCountしない...
-
SQLでLIMIT句を入れるとエラー...
-
SQL文を入力したらエラー
-
テーブル作成時に、「`id` int(...
-
MySQLで関連したデータを横に並...
-
MySQLで項目の反復定義(COBOL...
-
3つのテーブルから、データが...
-
phpとSQLで複数条件で検索する...
-
SQL文でダブルクォートか
-
MySQLでのテーブル名取得に制限...
-
VIEWに対してWHERE句をつける
-
空白文字を含む文字列データの検索
-
SQL任意に並び替えをしたい
-
コマンドプロンプト 複数の実...
-
後でemailに追加でPRIMARY KEY...
-
sqlの中で、 例えば条件句で AN...
-
JOIN使ってないのに、JOIN操作...
おすすめ情報