0

だから私は2つのテーブルを持っています:

class Applicant < ActiveRecord::Base
  set_table_name "applicant"
  belongs_to :specialization, :foreign_key => "id"
end

class Specialization < ActiveRecord::Base
  set_table_name "specialization"
  has_many :applicant, :foreign_key => "id"
end

専門分野別の応募者の総数を取得しようとしています。SQL では、次のようになります。

SELECT a.Name, COALESCE(b.total,0) AS "Total Applicants"
FROM specialization AS a
    LEFT JOIN ( SELECT specialization.Name, COUNT(*) as total
                FROM applicant
        JOIN specialization ON applicant.specialization = specialization.id
        GROUP BY specialization.name) AS b
ON a.name = b.name
ORDER BY a.name;

RoR でこれを行うにはどうすればよいですか? これまでのところ、私が試したことは次のとおりです。

<% Specialization.includes(:applicant).all.each do |s| %>
    <tr>
        <td><%= s.name%></td>
        <td><%= s.applicant.count()%></td>
    </tr>
<% end %>

ただし、一部の専門分野では 1 人の志願者しか数えていないため、データベースを見て、いくつかの専門分野に 4 人の志願者がいることがわかっているため、これは機能していないようです。

編集:これは pg SQL データベースであり、SQL ファイルからのテーブル作成コマンドは次のようになります。

CREATE TABLE Specialization (
    Id  SERIAL PRIMARY KEY,
    Name    TEXT
);

CREATE TABLE Applicant (
    Id              SERIAL PRIMARY KEY,
    FirstName       TEXT,
    MiddleInitial   TEXT,
    LastName        TEXT,
    Specialization  INTEGER REFERENCES Specialization (id) NOT NULL
);
4

0 に答える 0