次のようなテーブルがあります。
従業員
EmpID | EmpName |EmpSalary | DEpartment
それから別のテーブル
ボーナス
EmpID |EmpBonus
ボーナスを含めて、部門ごとに最高額の従業員を獲得するにはどうすればよいですか?
次のようなテーブルがあります。
従業員
EmpID | EmpName |EmpSalary | DEpartment
それから別のテーブル
ボーナス
EmpID |EmpBonus
ボーナスを含めて、部門ごとに最高額の従業員を獲得するにはどうすればよいですか?
SQL-Server を使用している場合は、ROW_NUMBER
orを使用しますDENSE_RANK
(タイを含める場合):
WITH CTE AS(
SELECT e.EmpID,e.EmpName,e.EmpSalary, e.Department,b.EmpBonus,
RN = ROW_NUMBER() OVER (PARTITION BY Department
ORDER BY (EmpSalary + COALESCE(EmpBonus,0)) DESC)
FROM Employees e LEFT OUTER JOIN Bonuses b
ON e.EmpID = b.EmpID
)
SELECT EmpID, EmpName, EmpSalary, Department, EmpBonus
FROM CTE
WHERE RN = 1
SQL Server で
SELECT top 1 e.EmpID,e.EmpName,e.Department,
sum(EmpSalary + EmpBonus) as total_salary
FROM Employees e INNER JOIN Bonuses b
ON e.EmpID = b.EmpID
group by e.EmpID,e.EmpName,e.Department
order by total_salary desc
MySQL では
SELECT e.EmpID,e.EmpName,e.Department,
sum(EmpSalary + EmpBonus) as total_salary
FROM Employees e INNER JOIN Bonuses b
ON e.EmpID = b.EmpID
group by e.EmpID,e.EmpName,e.Department
order by total_salary desc limit 1
これを試して:
select EmpID (EmpSalary+EmpBonus) as total_salary
from Employees e LEFT JOIN Bonuses b
order by total_salary desc
limit 1
使用している SGBD がわからないので、制限 1 が間違っている可能性があります。あなたのケースでどのように機能するかを実行してください。