首页 > 解决方案 > 查询两个表输出 (MYSQL)

问题描述

两张表 EMPLOYEE 和 Department EMPLOYEE 的字段是 ID,Name, Salary ,DEPT_ID(department table 的外键) DEPARTMENT 的字段是 id,NAME,LOCATION

员工表的价值将是 在此处输入图像描述

部门表的值将是

在此处输入图像描述

这些表的输出应该是

DEPARTMENT_Name 应该在他们的计数中按字母顺序排列 如果有相同的计数

员工表值

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 

部门表值

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

标签: mysqlsqldatabasemysql-workbenchdatagrip

解决方案


即使没有员工,您也想向所有部门显示的是 LEFT JOIN。因此,从部门表(查询中的别名“d”)和员工表(别名“e”)的 LEFT JOIN 开始。使用对上下文有意义的较短别名使可读性更容易。

现在,您有一个通用的“count( )”,它只返回一个计数,无论遇到多少记录,即使基于通用 ID 的辅助(员工)表中有多个记录。除了 count( ) 之外,我还计算了员工工资的总和,只是为了您可以在同一个查询中获得多个聚合值。使用或不使用它,只是想为您提供一个选项。

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

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`

推荐阅读