2010年 11月 25日 はてなブックマーク -
タグ: #MySQL

今回はMySQLで知っていると便利な構文その2として、集計時に便利な構文を紹介します。
集計をする際は、主にGROUP BYを多く用いると思いますので、そこに焦点を当てて説明します。


  • 説明の準備
  • 日付関数
  • WITH ROLLUP オプション
  • 数値実験(時間測定)

説明の準備


次のようなカラム構成のテーブルがあるとして、以下説明します。


テーブル名: order
* id: int(11)


  • product: varchar(32)
  • ordered_at: datetime
  • price: int(11)
  • quantity: int(11)

日付関数


MySQLの組み込み関数には日付操作用の関数が多数用意されてます。
日付関数によるGROUP BY 節の指定も可能で、なかなか使い勝手が良いです。


ordered_atという日付のカラムに対し、日付関数を用いて様々な期間での集計が可能となります。
特にYEAR(), MONTH(), DAY(), DAYNAME(), EXTRACT()が便利です。


  • YEAR(date): dateの年部分を返す
  • MONTH(date): dateの月部分を返す
  • DAY(date): dateの日部分を返す
  • DAYNAME(date): dateの曜日を返す
  • EXTRACT(TYPE FROM date): dateのTYPEで指定した部分を返す(YEAR_MONTHなど)

年毎に売上げを集計したい場合は、以下のようなSQL文で取得できます。


SELECT YEAR(ordered_at) as year, SUM(price * quantity) as total_price FROM order GROUP BY YEAR(ordered_at);


年月毎(2007年8月、2007年9月)に売上げを集計したい場合は、以下のようなSQL文で取得できます。


SELECT EXTRACT(YEAR_MONTH FROM ordered_at) year_month, SUM(price * quantity) as total_price FROM order GROUP BY EXTRACT(YEAR_MONTH FROM ordered_at);

MySQLの知っていると便利な構文(その2)|株式会社 フラッツ

1年前 | | 2010年 11月 25日 | このエントリーを含むはてなブックマーク