1. ホーム
  2. sql

[解決済み] ActiveRecordを使ったGROUP BYとCOUNTの使い方

2022-03-05 18:37:02

質問

参考にしてください。 GROUP BYとDISTINCTの違いは何ですか?

Given a table that looks like this:

name
------
barry
dave
bill
dave
dave
barry
john
This query:

SELECT name, count(*) AS count FROM table GROUP BY name;
Will produce output like this:

name    count
-------------
barry   2
dave    3
bill    1
john    1

ActiveModelがCOUNTでGROUP BYを実行するための、ここでの正しいRailsの規約は何でしょうか?

どのように解決するのですか?

DistinctGroup By は、異なる結果をもたらすことになります。期待通りの結果を得るには、次のようにします。

Person.group(:name).count
(1.2ms)  SELECT COUNT(*) AS count_all, name AS name FROM "people" GROUP BY "people"."name"
=> {"Dan"=>3, "Dave"=>2, "Vic"=>1} 

上で見たように、groupはハッシュとしてものを返します。一方、distinctは以下のように、単に全体の人数を返します。

Person.distinct(:name).count
(0.4ms)  SELECT DISTINCT COUNT(DISTINCT "people"."id") FROM "people"
=> 6