我對這個問題有點困惑,希望得到一些幫助。這就是我目前所在的位置。
我有這個名稱的 TEST 表。每個人都可以是招聘人員或員工。Recruited_by 中的數字與 person_id 相關聯。
Person_id Name Recruited_by
1 Jean Grayson 1
2 Paul Smith 7
3 John Do Null
4 Alex Lee 7
5 Lisa Kim 7
6 Bob Thompson 3
7 Mike Keen Null
8 Raymond Red 3
9 Alisson Jones 1
10 Kate James 3
這是我到目前為止的查詢,我正在嘗試查詢雇用超過 3 名員工的招聘人員的姓名(在這種情況下將不回傳任何內容)以及未被任何人招聘的員工人數(這將是NULL 名稱)。
SELECT T.Name as Employees, COUNT(T1.Name) as Not_hired
FROM Test AS T
WHERE COUNT(T1.Name) IS NULL
LEFT OUTER JOIN Test AS T1
ON T.Recruited_by = T1.Person_id
GROUP BY T.Name
HAVING COUNT(T1.Name) > 3
然而,當我期望它回傳未被招聘人員雇用的員工數量時,這個查詢沒有回傳任何內容!
uj5u.com熱心網友回復:
如果您只想在結果中顯示 1 行和 2 列,那么您可以對表進行左連接到一個查詢,該查詢聚合以獲取雇用超過 3 人的人員的 id 并再次聚合以獲取人數沒有被任何人招募:
SELECT GROUP_CONCAT(CASE WHEN t2.Recruited_by IS NOT NULL THEN t1.Name END ORDER BY t1.Name) names,
SUM(t1.Recruited_by IS NULL) total_not_recruited
FROM Test t1
LEFT JOIN (
SELECT Recruited_by
FROM Test
GROUP BY Recruited_by
HAVING COUNT(*) > 3
) t2 ON t2.Recruited_by = t1.Person_id;
您將獲得雇用超過 3 人(如果存在)的人員姓名作為逗號分隔串列。
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/330809.html
