読者です 読者をやめる 読者になる 読者になる

Railsガイド メモ 11

reading books programming

Railsガイド第7章


7.6 グループ

検索メソッドで実行されるSQLにGROUP BY句を追加したい場合は、groupメソッド を検索メソッドに追加できます。

たとえば、注文 (order) の作成日のコレクションを検索したい場合は、以下のようにし ます。

Order.select("date(created_at)␣as␣ordered_date ,␣sum(price)␣as␣total_price").group( "date(created_at)")

上のコードは、データベースで注文のある日付ごとに Order オブジェクトを 1 つ作成 します。 上で実行される SQL は以下のようなものになります。

SELECT date(created_at) as ordered_date, 
sum(price) as total_price FROM orders
GROUP BY date(created_at)

7.6.1 グループ化された項目の合計

グループ化した項目の合計をひとつのクエリで得るには、group の次に count を呼び 出します。

Order.group(:status).count
# => { 'awaiting_approval' => 7, 'paid' => 12 }
 

上で実行される SQL は以下のようなものになります。

SELECT COUNT (*) AS count_all, status AS status FROM "orders"
GROUP BY status;

7.7 Having

Order.select("date(created_at)␣as␣ordered_date ,␣sum(price)␣as␣total_price")
    .group("date(created_at)").having("sum(price)␣>␣?", 100) 
SELECT 
    DATE(created_at) as ordered_date, 
    SUM(price) as total_price FROM orders
GROUP BY date(created_at)
HAVING sum(price) > 100;

本日は、7.7まで読了。 それにしても、ActiveRecord 便利だ。。。