我如何 'join' 但在 MySQL 的表中将内容分开?

How do I 'join' but keep things separate in tables in MySQL?

我有两个 table。 Table 员工:

EmployeeID (employees)  LastName (employees)    FirstName (employees)
1                       Davolio                 Nancy

和Table订单:

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

我编辑了完整列表,因为它有数百行。

在table个Employees中,EmployeeID可以唯一标识一个员工,也就是说在table个Employee中不会重复。但是在 Table 'Order' 中,employeeID 可以重复多次,因为一个员工可以为很多订单提供帮助。

无论如何,我可以在这里看到,在订单 table 中,一个 employeeID 会重复多次,这意味着我需要在我的 MySQL 代码中的某处使用 COUNT(EmployeeID)>=2 .

这就是我想要的:

EmployeeID              Number of Orders
1                       2

如您所见,EmployeeID 在“订单”中出现了两次 table。所以他卖了 2 件商品,它链接到他的 1 个员工 ID。

所以这是我尝试过的:

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

这是输出:

错误:字段列表中的列 'EmployeeID' 不明确 — 错误代码 1052

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

您想要构建属于同一员工的订单组,然后过滤每组的行数。为此,您可以使用 group byhaving:

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

请注意,此处不需要连接。您可以直接从订单的table中得到您想要的结果:

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

不需要加入employeestable,可以从orders获取员工ID。只有当您还需要来自 employee table 的其他信息(例如他们的姓名)时,您才需要加入。

您需要 GROUP BY employeeID 来计算每位员工的数量。

>= 2不应该在COUNT()函数里面,你要比较结果。

您需要使用 HAVING 而不是 WHEREWHERE 用于 select 在 聚合之前处理 行。

您应该使用 COUNT(*) 而不是 COUNT(columnName) 除非您需要从计数中排除该列的空值。

如果您为 COUNT(*) 结果指定别名,则可以在 HAVING 子句中使用该别名,而不是重新声明函数。

SELECT EmployeeID, COUNT(*) AS number_of_orders
FROM orders B
GROUP BY EmployeeID
HAVING number_of_orders >= 2

关于不明确列的错误原因是因为两个 table 都有 EmployeeID 列。在 SELECT 列表中,您需要指定 A.EmployeeIDB.EmployeeID,就像您在 ON 子句中所做的那样。