

テーブルに複数列があり、合計が1以上の列だけテーブルに残したいです。  
また、残った列は列名を変えたいのですが、コードが分からず苦戦しております。

ストアドプロシージャ？を使う必要があるのか？まで行きついたのですが八方ふさがりになってしまいました。

### 環境

OS：Win10 64bit  
MySQL：mysql Ver 14.14 Distrib 5.7.33, for Win32 (AMD64)  
実行環境：コマンドプロンプト

### 現行のtbl

[code]

    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
    
[/code]

### 期待する処理

  1. user列とprice列を除くaからkuまでの列の合計をチェックする
  2. 列合計が0の場合、列ごと削除
  3. 列合計が0より大きい場合、列名を変える（a列なら「あ」、i列なら「い」のように）

※2,3ともに、人間が目で見て `ALTER TABLE tbl DROP/RENAME COLUMN～`
で削除/列名変更するのではなく、クエリ文で対応したい

### 処理後の[after_tbl]イメージ

[code]

    user, price, あ, い, う, え, お
    yamada, 600, 1, 1, 1, 1, 1
    tanaka, 780, 1, 0, 0, 0, 0
    kato,   500, 0, 1, 0, 1, 1
    
[/code]


CC BY-SA 4.0
2021-02-14T13:30:02.073
73992
2021-02-15T02:54:14.847
2021-02-14T16:32:12.230
3060
26841
question
mysql sql
MySQLでフィールド合計が0の場合のみ、その列を削除したい


ストアドプロシージャにて実現可能でしょうが、一般のプログラミング言語と比べると構文がやや特殊で色々と面倒なので、一度切りの作業であれば私ならExcelやGoogleスプレッドシートで対応してしまいます。

サンプルを用意してみました。  
<https://docs.google.com/spreadsheets/d/1IazXHy5Up91VaqoLLoS4MOdeRqLpor53a5VaEDql_L4/edit?usp=sharing>  
※閲覧のみ可にしております

データをCSV等にエクスポートして、スプレッドシートに貼り付け、リネーム後のカラム名を手動で入力。  
あとはSUM関数とIF文で実行したいALTER文を出力。

最後に出来上がったALTER文の行をコピーして流すだけです。


CC BY-SA 4.0
2021-02-15T02:54:14.847
74004
2021-02-15T02:54:14.847
9608
73992
answer