mysqlの曜日を取る関数について

以前に在庫管理アプリを作っていた時に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