2019/2/17、18、19学習記録

Rails 5.2.2でrasack2.0.1が使えずエラーではまった話

以下のエラーが発生しrails sが起動しない。

`require': cannot load such file -- polyamorous/activerecord_5.2.2_ruby_2/join_association (LoadError)

ransackを使用して検索機能を追加しようとしていたので、これが怪しいと思い探していたらこんな記事を発見。

cannot load such file -- polyamorous/activerecord_5.2.2_ruby_2/join_association · Issue #987 · activerecord-hackery/ransack · GitHub

$bundle update ransackで無事解決。

bundle installした時点でこのようなエラーは出ないものと考えていたのだが、違うのだろうか。。bundlerはgem同士の依存関係をよしなに解決してくれるものだと思っていた。

 

SQL基本

selectでカラムを指定
fromでテーブル名を指定
whereで条件を絞り込む
where not とすると条件の否定検索になる。

select*とすると全てのカラムが選択される。
where name like "%hoge%"とするとhogeを含む文字列がnameカラムから全て抜き出される。likeの時は=を使用しないので注意。

 

条件を加える時はand、どちらかの条件を満たす時とするのはorを使用する。
ex)

select *
from purchaces
where name = "hoge"
and price = 1000

order by column_name desc等の記述で並び替えが可能。whereと併用も可能。limitの記載で取得件数も指定できる。
ex)

select *
from purchases
order by price desc
limit 5;

distinctは重複を除く記述法。select distinct(column_name)のような形で使用。
sum,avg,max,min,countとも同じようにselect sum(price)のようにして使用するがcountについては、

select count(food)
form purchases
where character_name = "hoge"

と仮にするとhogeのfoodカラムのnullを除く数をカウントする。
nullを含める場合は、

select count(*)
from purchases
where characrer_name = "hoge"

とする。こうすることでhogeのレコードの数がカウントされるようになる。

group by とすると指定したカラムでグループ化される。なおgroup byではselect文でgroup byに指定しているカラムと集計関数しか使えない点に注意。


select sum(price),purchased_at
from purchased_at
group by purchased_at

where文も追加して検索条件を指定することも可能。さらにhavingを利用して絞り込むことも可能。

select sum(price),purchased_at,character_name
from purchased_at
where category = "food"
group by purchased_at,character_name
having sum(price) > 3000

これだとカテゴリーカラムがfoodの値段の合計が3000より上回るものを日付とキャラクターの名前でグループ化した結果が帰る。

 

サブクエリについて
select rank as "日本よりFIFAランクが高い国"
from countries
where rank < (

  select rank
  from countries
  where name = "日本 "
);

このように記載することで、一気にまとめてSQLを記載することができる。