mysql - 查询两个表输出 (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
解决方案
即使没有员工,您也想向所有部门显示的是 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`
推荐阅读
- oracle - Oracle 自依赖类型声明
- caffe - Caffe欧几里得层的输入一定是2dims?
- python-3.x - 没有打印功能的python 3中的字符串格式
- java - 使用 Spring 连接未在列表中实现标记接口的 bean
- java - 从 HashMap 打印值不返回值本身
- amazon-web-services - 在 Elastic-Beanstalk Worker 上运行 Flask 端口 80
- apache-spark - Spark Structured Streaming 流-流连接问题
- javascript - 使用Angular 4为日期类型的HTML输入赋值
- python-3.x - Python:双引号和转义符在 csv 模块中的作用是什么?
- android - 如何在 android 应用程序中获取 android 屏幕图像