勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

MySQLで月別に集計を行う。あと日付時刻関数。

      2014/05/22

現在進行形でやっているデータ集計系だけど
新たな発見があったのでメモ。

■日付時刻関数
datetime型のカラムがあってフォーマットは
YYYY-MM-DDという形。時間はなし。

で、2012年分を抽出する際に、

WHERE ymd BETWEEN '2012-01-01' AND '2012-12-31'

もしくは、

WHERE ymd >= '2012-01-01' AND ymd <= '2012-12-31'

として書いていた。
が、日付時刻関数というものがあるみたい。

■参考サイト
http://phpjavascriptroom.com/?t=mysql&p=datetime

今回のケースだと、

WHERE YEAR(ymd) = '2012'

とすごくスマートに書ける。

■月別で集計を行う
やりたかったことは年間のデータを月別に分けて
1つのページに表示させたかった。

例えば、

2012年 合計 10000
1月 1021
2月 894
3月 777
....
12月 1509

みたいな感じ。
1ヶ月ずつ12回SQLを打つのか、1年分をSUM使わずに
丸々取得してPHPで処理するのかみたいなこと考えて
しまったけど、ちゃんとやり方があるみたい。

 

SELECT
code,
DATE_FORMAT(aaaymd,"%Y-%m") AS ymd
FROM table
WHERE code = 111
AND aaaymd BETWEEN "' . $start_ymd . '" AND "' . $end_ymd . '"
GROUP BY ymd

■参考サイト
http://www3441ui.sakura.ne.jp/wordpress/?p=654

●年●月ごとにGROUP BYを行っているみたい。
で、WHERE句で1年縛りにしたら良い。
DATE_FORMATって凄い。

 - MySQL

  関連記事

MySQLで日時や日付で範囲検索する際の速度向上

結論としてはUNIXタイムスタンプ型にする。 MySQLでdatetime型で2 ...

1回のSQL文で複数のUPDATE

INSERTはバルクインサートを使えばいいが、 UPDATEはあまり聞かないので ...

htmlspecialcharsを通してMySQLに格納したものを元に戻して出力

MySQLにHTMLタグを入れたくない場合にhtmlspecialcharsを使 ...

MySQLで構文エラーが出た際は予約語も疑う

MySQLで構文エラーが発生しており、チェックしたところ、どう見ても構文的には間 ...

adminerでMySQLに接続しようとするとエラー

新しく構築したサーバにadminerを入れて接続しようとすると、「mysqlnd ...

WordPressで「データベース接続確立のエラー」

WordPressで設定ファイル(wp-config.php)は触っていないのに ...

MySQLでパターンマッチの逆

LIKE検索の逆ってなったのでメモ。 NOT LIKE '%あああ%' が正解み ...

MySQLで実行結果の行数取得

DBにデータがあるか調べる際にしばしば使用してたのでメモ。 $sql = " S ...

MySQLの値について

既存プログラムの解析をしてて知ったこと。 MySQLの構造で「int(11)」と ...

MySQLで複数のテーブルを異なるデータベースと異なるカラムでJOIN

ちょっとややこしいんだけど、以下のような条件で3つのテーブルを結合したかった。 ...