繁体   English   中英

我如何“加入”但在 MySQL 的表中保持独立?

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

我有两张桌子。 表员工:

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

和表订单:

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

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

在Employees表中,EmployeeID可以唯一标识一个员工,在Employee表中不会重复。 然而,在表 'Order' 中,employeeID 可以重复多次,因为一个员工可以出售许多订单的帮助。

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

这就是我想要的:

EmployeeID              Number of Orders
1                       2

如您所见,EmployeeID 在“订单”表中出现了两次。 所以他卖了 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

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

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

不需要加入employees表,可以从orders获取employee ID。 仅当您还需要employee表中的其他信息(例如他们的姓名)时才需要加入。

您需要GROUP BY employeeID来获取每个员工的计数。

>= 2不应该在COUNT()函数内,您要比较结果。

您需要使用HAVING而不是WHERE 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 ,就像您在ON子句中所做的那样。

暂无
暂无

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

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