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
任何其他方法将不胜感激