如何“加入”但在MySQL的表中将它们分开?

问题描述

我有两个桌子。表员工:

OrderID (orders)    CustomerID (orders) EmployeeID (orders)
10248               90                  5
10278               45                  1
10238               47                  1

和表顺序:

EmployeeID              Number of Orders
1                       2

删除了完整的列表,因为它有数百行。

在雇员表中,雇员ID可以唯一地标识雇员,这意味着它不会在雇员表中重复。但是,在“订单”表中,employeeID可以重复多次,因为员工可以出售很多订单的帮助。

无论如何,我可以在这里看到在Orders表中,一个employeeID将重复几次,这意味着我需要在我的MysqL代码中的某个地方使用COUNT(EmployeeID)> = 2。

这就是我想要的:

SELECT EmployeeID,COUNT(EmployeeID) FROM
employees A inner join 
orders B
ON (A.EmployeeID=B.EmployeeID)
WHERE COUNT(B.EmployeeID >=2)

如您所见,EmployeeID在“订单”表中显示两次。因此他卖了2件商品,并且链接到他的1个“员工ID”。

这就是我尝试过的:

{{1}}

这是输出

错误:字段列表中的列“ EmployeeID”不明确-错误代码1052

我不确定在这种情况下如何获得此结果。

解决方法

您要构建属于同一员工的订单组,然后根据每个组的行数进行筛选。为此,您可以使用group byhaving

select employeeid,count(*) cnt_orders
from employees e 
inner join orders o using(employeeid)
group by employeeid
having count(*) >= 2

请注意,此处不需要联接。您可以直接从订单表中获得所需的结果:

select employeeid,count(*) cnt_orders
from orders 
group by employeeid
having count(*) >= 2
,

无需加入if (intersects.length > 0) { SELECTED = intersects[ 0 ].object; control.attach(SELECTED); scene.add(control); } else { control.detach(); // <- THIS IS CORRECT scene.remove(control); } 表,您可以从employees获取员工ID。仅当您还需要orders表中的其他信息(例如其名称)时,才需要加入。

您需要employee才能为每位员工计数。

GROUP BY employeeID不应放在>= 2函数中,要比较结果。

您需要使用COUNT()而不是HAVINGWHERE用于选择要在汇总之前处理 的行。

除非应该从计数中排除列的空值,否则应使用WHERE而不是COUNT(*)

如果为COUNT(columnName)结果指定别名,则可以在COUNT(*)子句中使用该别名,而不用重述函数。

HAVING

出现关于歧义列的错误的原因是因为两个表都有SELECT EmployeeID,COUNT(*) AS number_of_orders FROM orders B GROUP BY EmployeeID HAVING number_of_orders >= 2 列。就像在EmployeeID子句中一样,在SELECT列表中,您需要指定A.EmployeeIDB.EmployeeID