鍍金池/ 問答/HTML5  數(shù)據(jù)庫(kù)/ 這個(gè)sql自連接應(yīng)該怎么理解?

這個(gè)sql自連接應(yīng)該怎么理解?

題目描述

Employee 表
Id Name Salary DepartmentId
1 Joe 70000 1
2 Henry 80000 2
3 Sam 60000 2
4 Max 90000 1
5 Janet 69000 1
6 Randy 85000 1

Employee 表包含所有員工信息,每個(gè)員工有其對(duì)應(yīng)的 Id, salary 和 department Id 。

Department 表
Id Name
1 IT
2 Sales

Department 表包含公司所有部門的信息。

編寫一個(gè) SQL 查詢,找出每個(gè)部門工資前三高的員工。

相關(guān)代碼

// 請(qǐng)把代碼文本粘貼到下方(請(qǐng)勿用圖片代替代碼)

答案:

SELECT d.Name AS Department, e.Name AS Employee, e.Salary
FROM Department d, Employee e
WHERE b.DepartmentId = d.Id
    AND (
        SELECT COUNT(DISTINCT Salary)
        FROM Employee
        WHERE DepartmentId = d.Id
            AND Salary > e.Salary
    ) < 3
ORDER BY Department

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

應(yīng)該怎么理解其中的子查詢:
(SELECT COUNT(DISTINCT Salary)
FROM Employee
WHERE DepartmentId = d.Id
AND Salary > e.Salary) < 3

自己試了一下

SELECT a.Salary
    FROM Employee a ,Employee b WHERE a.Salary > b.Salary

發(fā)現(xiàn)還是看不懂是什么個(gè)查詢邏輯....

回答
編輯回答
入她眼

這個(gè)子查詢的作用是:

對(duì)于一行數(shù)據(jù)
查找同部門,計(jì)算同部門工資比他高的人的人數(shù)

如果少于三個(gè) (說明他的工資就是該部門前三高)

那么 where 成立

2018年6月21日 01:56