Mysql 活动记录两级关联和按计数分组

Mysql 活动记录两级关联和按计数分组,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,考虑以下关联 公司 has_many: departments belongs_to: company has_many: employees belongs_to: department +------------+--------------+ | company_id | company_name | +------------+--------------+ | 1 | Company A | | 2 | Company B | +-

考虑以下关联

公司

has_many: departments
belongs_to: company
has_many: employees
belongs_to: department
+------------+--------------+
| company_id | company_name |
+------------+--------------+
|          1 | Company A    |
|          2 | Company B    |
+------------+--------------+
+---------------+------------+-----------------+
| department_id | company_id | department_name |
+---------------+------------+-----------------+
|             1 |          1 | Administration  |
|             2 |          1 | Development     |
|             3 |          1 | Designing       |
+---------------+------------+-----------------+
+-------------+---------------+---------------+----------------+
| employee_id | department_id | employee_name | employee_grade |
+-------------+---------------+---------------+----------------+
|           1 |             1 | EmpA          | grade1         |
|           2 |             1 | EmpB          | grade1         |
|           3 |             2 | EmpC          | grade1         |
|           4 |             2 | EmpD          | grade2         |
+-------------+---------------+---------------+----------------+
部门

has_many: departments
belongs_to: company
has_many: employees
belongs_to: department
+------------+--------------+
| company_id | company_name |
+------------+--------------+
|          1 | Company A    |
|          2 | Company B    |
+------------+--------------+
+---------------+------------+-----------------+
| department_id | company_id | department_name |
+---------------+------------+-----------------+
|             1 |          1 | Administration  |
|             2 |          1 | Development     |
|             3 |          1 | Designing       |
+---------------+------------+-----------------+
+-------------+---------------+---------------+----------------+
| employee_id | department_id | employee_name | employee_grade |
+-------------+---------------+---------------+----------------+
|           1 |             1 | EmpA          | grade1         |
|           2 |             1 | EmpB          | grade1         |
|           3 |             2 | EmpC          | grade1         |
|           4 |             2 | EmpD          | grade2         |
+-------------+---------------+---------------+----------------+
员工

has_many: departments
belongs_to: company
has_many: employees
belongs_to: department
+------------+--------------+
| company_id | company_name |
+------------+--------------+
|          1 | Company A    |
|          2 | Company B    |
+------------+--------------+
+---------------+------------+-----------------+
| department_id | company_id | department_name |
+---------------+------------+-----------------+
|             1 |          1 | Administration  |
|             2 |          1 | Development     |
|             3 |          1 | Designing       |
+---------------+------------+-----------------+
+-------------+---------------+---------------+----------------+
| employee_id | department_id | employee_name | employee_grade |
+-------------+---------------+---------------+----------------+
|           1 |             1 | EmpA          | grade1         |
|           2 |             1 | EmpB          | grade1         |
|           3 |             2 | EmpC          | grade1         |
|           4 |             2 | EmpD          | grade2         |
+-------------+---------------+---------------+----------------+
考虑以下示例数据

公司

has_many: departments
belongs_to: company
has_many: employees
belongs_to: department
+------------+--------------+
| company_id | company_name |
+------------+--------------+
|          1 | Company A    |
|          2 | Company B    |
+------------+--------------+
+---------------+------------+-----------------+
| department_id | company_id | department_name |
+---------------+------------+-----------------+
|             1 |          1 | Administration  |
|             2 |          1 | Development     |
|             3 |          1 | Designing       |
+---------------+------------+-----------------+
+-------------+---------------+---------------+----------------+
| employee_id | department_id | employee_name | employee_grade |
+-------------+---------------+---------------+----------------+
|           1 |             1 | EmpA          | grade1         |
|           2 |             1 | EmpB          | grade1         |
|           3 |             2 | EmpC          | grade1         |
|           4 |             2 | EmpD          | grade2         |
+-------------+---------------+---------------+----------------+
部门

has_many: departments
belongs_to: company
has_many: employees
belongs_to: department
+------------+--------------+
| company_id | company_name |
+------------+--------------+
|          1 | Company A    |
|          2 | Company B    |
+------------+--------------+
+---------------+------------+-----------------+
| department_id | company_id | department_name |
+---------------+------------+-----------------+
|             1 |          1 | Administration  |
|             2 |          1 | Development     |
|             3 |          1 | Designing       |
+---------------+------------+-----------------+
+-------------+---------------+---------------+----------------+
| employee_id | department_id | employee_name | employee_grade |
+-------------+---------------+---------------+----------------+
|           1 |             1 | EmpA          | grade1         |
|           2 |             1 | EmpB          | grade1         |
|           3 |             2 | EmpC          | grade1         |
|           4 |             2 | EmpD          | grade2         |
+-------------+---------------+---------------+----------------+
员工

has_many: departments
belongs_to: company
has_many: employees
belongs_to: department
+------------+--------------+
| company_id | company_name |
+------------+--------------+
|          1 | Company A    |
|          2 | Company B    |
+------------+--------------+
+---------------+------------+-----------------+
| department_id | company_id | department_name |
+---------------+------------+-----------------+
|             1 |          1 | Administration  |
|             2 |          1 | Development     |
|             3 |          1 | Designing       |
+---------------+------------+-----------------+
+-------------+---------------+---------------+----------------+
| employee_id | department_id | employee_name | employee_grade |
+-------------+---------------+---------------+----------------+
|           1 |             1 | EmpA          | grade1         |
|           2 |             1 | EmpB          | grade1         |
|           3 |             2 | EmpC          | grade1         |
|           4 |             2 | EmpD          | grade2         |
+-------------+---------------+---------------+----------------+
RoR中是否有一行代码用于查找属于每个级别的公司员工数?即如果company_id等于1,则输出如下

+--------+-------+
| grade  | count |
+--------+-------+
| grade1 |     3 |
| grade2 |     1 |
+--------+-------+
has_many :departments
has_many :employees, :through => :departments
我尝试的一种方法是获取公司的部门,然后在其中循环,获取每个部门的等级分组员工计数,然后添加计数。还有别的办法吗?

我想,我有办法

使用
向员工添加公司中的另一个关联。因此,该公司将变得如下

+--------+-------+
| grade  | count |
+--------+-------+
| grade1 |     3 |
| grade2 |     1 |
+--------+-------+
has_many :departments
has_many :employees, :through => :departments
然后按以下步骤查找计数

Company.find([company_id]).employees.group('employee_grade').count
任何其他方法将不胜感激