質問: テーブルに複数列があり、合計が1以上の列だけテーブルに残したいです。 また、残った列は列名を変えたいのですが、コードが分からず苦戦しております。 ストアドプロシージャ?を使う必要があるのか?まで行きついたのですが八方ふさがりになってしまいました。 ### 環境 OS:Win10 64bit MySQL:mysql Ver 14.14 Distrib 5.7.33, for Win32 (AMD64) 実行環境:コマンドプロンプト ### 現行のtbl ``` user, price, a, i, u, e, o, ka, ki, ku yamada, 600, 1, 1, 1, 1, 1, 0, 0, 0 tanaka, 780, 1, 0, 0, 0, 0, 0, 0, 0 kato, 500, 0, 1, 0, 1, 1, 0, 0, 0 ``` ### 期待する処理 1. user列とprice列を除くaからkuまでの列の合計をチェックする 2. 列合計が0の場合、列ごと削除 3. 列合計が0より大きい場合、列名を変える(a列なら「あ」、i列なら「い」のように) ※2,3ともに、人間が目で見て `ALTER TABLE tbl DROP/RENAME COLUMN~` で削除/列名変更するのではなく、クエリ文で対応したい ### 処理後の[after_tbl]イメージ ``` user, price, あ, い, う, え, お yamada, 600, 1, 1, 1, 1, 1 tanaka, 780, 1, 0, 0, 0, 0 kato, 500, 0, 1, 0, 1, 1 ```
回答: ストアドプロシージャにて実現可能でしょうが、一般のプログラミング言語と比べると構文がやや特殊で色々と面倒なので、一度切りの作業であれば私ならExcelやGoogleスプレッドシートで対応してしまいます。 サンプルを用意してみました。 ※閲覧のみ可にしております データをCSV等にエクスポートして、スプレッドシートに貼り付け、リネーム後のカラム名を手動で入力。 あとはSUM関数とIF文で実行したいALTER文を出力。 最後に出来上がったALTER文の行をコピーして流すだけです。