繁体   English   中英

左联接或内联接

[英]Left join or inner join

我有一个表, Table_employee有员工ID,薪水,经理(每个员工各自经理的ID),还有另一个表Table_manager ,其中有每个经理的名字,姓氏和每个经理的ID。

我试图创建另一个表,该表显示经理的名字,姓氏以及每个经理负责的员工人数以及这些员工的总薪水。

我无法提供经理的名字和姓氏。

我的代码如下。 任何帮助将不胜感激。

非常感谢你!

select 
   e.manager, 
   COUNT(e.employee_id), 
   SUM(e.salary) 
FROM 
   Table_employee e 
   Right outer join Table_manager m ON e.manager=m.employee_id 
GROUP BY 
   manager 
ORDER BY 
   manager

使用LEFT JOIN和聚合。 如果您正在学习SQL,请忘记RIGHT JOIN 几乎不需要它。 而且, LEFT JOIN更易于遵循(“将所有内容保留在第一个表中”和“将所有内容保留在最后一个表中”)。

所以:

select m.employee_id, m.firstname, m.lastname, 
       count(e.employee_id), sum(e.salary)
from Table_manager m left join
     Table_employee e
     ON e.manager = m.employee_id
group by m.employee_id, m.firstname, m.lastname
order by m.employee_id;

您只需要在组中添加名字和姓氏即可? 我是否缺少一些复杂性?

select e.manager, m.firstname, m.lastname, COUNT(e.employee_id), SUM(e.salary)
FROM Table_employee e
Right outer join Table_manager m ON e.manager=m.employee_id\
GROUP BY manager, m.firstname, m.lastname
ORDER BY manager

但是,交换订单以使经理在左边,员工在右边是更有意义的,这样您就不会错过没有员工的经理:

select e.manager, m.firstname, m.lastname, COUNT(e.employee_id), SUM(e.salary)
FROM Table_manager m
Right outer join Table_employee e ON e.manager=m.employee_id
GROUP BY manager, m.firstname, m.lastname
ORDER BY manager

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM