[英]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 by
並having
:
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.EmployeeID
或B.EmployeeID
,就像您在ON
子句中所做的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.