以前に在庫管理アプリを作っていた時にmysqlを使用していたのですが、
その時に「ん?」ってなったことがあったのでここに残しておきます。
やりたかったこと・・・
「曜日ごとに使用される在庫数の平均値を取りたい」
→在庫の確認や発注の際に表示されると便利
使用するテーブル
「ITEM_MST」・・・品物のマスタデータを格納
「USE_TABLE」・・・いつどれだけ在庫を使用したかのデータを格納
さっそく曜日ごとの平均使用数を出してみる
①まずAVG関数で使用数の平均を求める。平均の対象となるのはIDと曜日。
→DATE_FORMAT関数は日付を曜日のインデックスに変換してくれる。(重要)
②抽出条件として、その日の曜日に当てはまるデータを出力する。
→WEEKDAY関数でその日の曜日のインデックスを返してくれる。(重要)
↑一見上手く言っているように見えるが・・・
・・・「ん?」と、ここで何かが間違っていることに気づきます。
そもそも戻り値を勘違いしていた
「DATE_FORMAT」関数
→0(日曜日)~6(土曜日)の戻り値を返す。
「WEEKDAY関数」
→0(月曜日)~6(日曜日)の戻り値を返す。
完全にトラップでした。
最終的な対処方法
単純に今日の日付に一日プラスして曜日のズレを直しました。
何となく力業な気がしますが、ひとまず欲しい平均値は取れました。
ちなみに、mysqlでもう一つDAYOFWEEK関数という曜日を取る関数ありましたが、こちらも戻り値は違っていました。
1(日曜日)~7(土曜日)みたいです・・・なんで全部違うの?
参考にしたサイト
https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html
http://d.hatena.ne.jp/xyk/20110713/1310520256