rails - クエリの基本(2)
特定のフィールドを取得する
select を使う
User.select(:name)
SELECT name FROM "users"
複数のフィールド名を指定できる
User.select(:id, :name)
SELECT id, name FROM "users"
フィールド名は,区切りの文字列でもよい。
そのまま渡されるので max や minなども使える(てしまう)。
User.select("id,name")
SELECT id,name FROM "users"
ソートする
order を使う。
User.order(:created_at)
レコードの取得数と取得開始位置を制御する
limit と offset を使う。
主キー(id)のソートは無くなるので、orderで明示しないと
結果が異なる。
次の例は先頭5件目から30件ずつ表示する。
User.limit(30).offset(5)
SELECT "users".* FROM "users" LIMIT 30 OFFSET 5
なお、limit と offset は逆にしても同じ結果が得られる。
User.offset(5).limit(30)
グループ化する
group と having を使う。
必要な部分や集計結果を取得する用途には select とあわせて
使うことが多いだろう。
結果は呼び出し元のモデルクラスのインスタンスとして返される。
result = User.select("sex,count(sex) as sex_count").group(:sex).having("age < 20").order(:sex) result[0] # Userのインスタンス result[0].sex # 1 result[0].sex_count # 4
SELECT sex,count(sex) as sex_count FROM "users" GROUP BY sex HAVING age < 20 ORDER BY "users"."sex" ASC
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (14件) を見る