Saturday, March 25, 2017

Mar25 カラムの自由スロットル化

今日のおすすめはFKJのこのギグです



ライブのDaft Punkかよってかんじ

So much good sounds I found this week.



あとはSoundCloudで。今週のは良い!と思います。







今週学んだMySQLはSUBSTRING_INDEX()GROUP_CONCAT()を使って、表中の値を自由自在に変えられる技。


日付 売上
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次元になります。