查询两个表之间的输出 (MYSQL)

Query BETWEEN TWO TABLES OUTPUT (MYSQL)

两个 table 员工和部门 EMPLOYEE 的字段是 ID,Name, Salary ,DEPT_ID(部门的外键 table) 部门的字段是 id,NAME,LOCATION

员工的价值观TABLE将是

部门的价值 TABLE 将是

这些 table 的输出应该是

DEPARTMENT_Name 应该在他们的计数中按字母顺序排列如果有相同的计数 DEPARTMENT_Name 应该按字母顺序出现并且计数将按降序排列

雇员TABLE 价值观

id   name        salary        dept_id
1    Candice     4685          1
2    Julia       2559          2 
3    Bob         4405          4 
4    Scarlet     2305          1 
5    Ileana      1151          4 

部门TABLE 值

id   name           location
1    Executive      Sydney 
2    Production     Sydney 
3    Resources      Cape Town 
4    Technical      Texas 
5     Management    Paris 

输出数据应该是

DEPARTMENT_Name   Count_OF_EMPLOYEE_SAME_DEPARTMENT
Executive         2,
Technical         2,
PRODUCTION        1,
MANAGEMENT        0,
RESOURCES         0

即使没有员工,您想要显示所有部门的内容是 LEFT JOIN。因此,从部门 table(查询中的别名 "d")开始,然后 LEFT JOIN 到员工 table(别名 "e")。使用对上下文有意义的较短的别名使可读性更容易。

现在,您有公共 "count()",它只是 returns 对遇到的记录的计数,即使在次要(员工)中有多个 table 基于公共 ID .除了计数()之外,我还对员工薪水进行了求和,只是为了您可以在同一查询中获得多个聚合值。使用或不使用,只是想呈现为给你的选择。

现在下单。您希望首先基于最高计数,因此 COUNT(*) DESC(降序)是第一个排序。 Secondary 是部门名称,如果在相同的计数内,则按字母顺序排列。

select
        d.`name` Department_Name,
            d.Location,
        count(*) NumberOfEmployees,
        sum( coalesce( e.salary, 0 )) as DeptTotalSalary
    from
        Department d
            left join employee e
                on d.dept_id = e.id
    group by
        d.`name`
    order by
        count(*) desc,
        d.`name`