-3

次のようなテーブルがあります。

従業員

EmpID | EmpName |EmpSalary | DEpartment

それから別のテーブル

ボーナス

EmpID |EmpBonus

ボーナスを含めて、部門ごとに最高額の従業員を獲得するにはどうすればよいですか?

4

3 に答える 3

4

SQL-Server を使用している場合は、ROW_NUMBERorを使用します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

ランキング機能

于 2013-09-17T09:07:30.783 に答える
-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
于 2013-09-17T09:12:06.907 に答える
-1

これを試して:

select EmpID (EmpSalary+EmpBonus) as total_salary
from Employees e LEFT JOIN Bonuses b
order by total_salary desc
limit 1

使用している SGBD がわからないので、制限 1 が間違っている可能性があります。あなたのケースでどのように機能するかを実行してください。

于 2013-09-17T09:13:28.063 に答える