2018年2月21日水曜日

MySQLで縦持ちテーブルを横持ちテーブルにする(サブクエリを使わない)

pythonの記事がどうしても今日かけなかったのでSQLのハックで好きなものを書きます(2017年3月の私の別の日記の記事)


日付 売上
2017-03-10 10,500
2017-03-12 5,470
2017-03-18 20,100


このようなorder_tableというテーブルがあったとして、これを


日付 2017-03-10 2017-03-12 2017-03-18
売上 10,500 5,470 20,100


こうする方法を考えます。
SQLでは縦並びの情報が日付と数字と違うとエラーなので、売上額だけ横に並べてみます。
カラム名もダイナミックに変える方法があれば教えてください。

SQLでは縦並びのデータを横並びにする方法はいくつかあるけど、

SELECT
  SUBSTRING_INDEX(GROUP_CONCAT(売上 ORDER BY 日付), ',', 1),
  SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(売上 ORDER BY 日付), ',', 2), ',', -1),
  SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(売上 ORDER BY 日付), ',', 3), ',', -1)
 FROM
  order_table


各カラム内でデータを縦持ちテーブル内の任意のデータに沿って並べ、その中のn番目のデータ(nは自由に指定できる)を表示させることが出来ます。

イメージ的にカラムがスロットルになったような感じです。
これでSQLが2次元から3次元になります。

python を始めてからインデックスの考え方に慣れたけどこれを書いた一年前は初めてで新鮮でした