我有 2 個表,我想加入其中的聯系人 ID 是唯一的并且具有最高的限額。
員工
| 員工ID | 聯系方式 | 雇主ID |
|---|---|---|
| 1 | 555444333 | 25435566 |
| 2 | 555444333 | 84235621 |
| 3 | 234232144 | 57353457 |
員工詳情
| 員工ID | 年度津貼 |
|---|---|
| 1 | 10000 英鎊 |
| 2 | 1000 英鎊 |
| 3 | 2000 英鎊 |
我想在下面實作我想顯示具有唯一contactid最高限額的EmployeeID。
| 員工ID | 聯系方式 | 年度津貼 |
|---|---|---|
| 1 | 555444333 | 10000 英鎊 |
| 3 | 234232144 | 2000 英鎊 |
我已經嘗試了下面的 SQL 代碼,但它沒有給我最高限額的唯一聯系人 ID。
SELECT EMPLOYEE.employeeid, EMPLOYEE.contactid, MAX(EMPLOYEEDETAILS.annualallowance)
from
cxm_employee EMPLOYEE
JOIN
cxm_employeedetails EMPLOYEEDETAILS ON EMPLOYEE.employeeid = EMPLOYEEDETAILS.employeeid
group by EMPLOYEE.employeeid,EMPLOYEE.employeecontactid
我哪里錯了?
uj5u.com熱心網友回復:
我想顯示具有最高限額的唯一聯系人 ID 的 EmployeeID。
您的代碼不起作用,因為它只帶來了當前員工的詳細資訊,而讓其他具有相同contactid.
我認為使用視窗功能更容易:
select *
from (
select e.*, d.annualallowance,
rank() over(partition by e.contactid order by d.annualallowance desc) rn
from employee e
inner join employeedetails d on d.employeeid = e.employeeid
) t
where rn = 1
rank()按年度津貼遞減排列具有相同聯系的員工;然后我們可以使用這些資訊進行過濾。
在不支持視窗函式的 MySQL 8.0 之前的版本中,替代方法使用相關子查詢來檢索每個聯系人的最高限額;然后我們可以使用這些資訊來過濾資料集:
select e.*, d.annualallowance
from employee e
inner join employeedetails d on d.employeeid = e.employeeid
where d.annualallowance = (
select max(d1.annualallowance)
from employee e1
inner join employeedetails d1 on d1.employeeid = e1.employeeid
where e1.contactid = e.contactid
)
DB Fiddle 上的演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529141.html
下一篇:有條件地向Spark資料框添加列
