-1

我有一个名为employees 的表,带有'employee_id''bonuses'作为列。重复employee_id是因为它们有多个不同金额的奖金,我想按奖金总额对它们进行排名。

所以,我想知道这是否是按员工总奖金金额降序排列的正确方法:

SELECT employee_id, SUM(bonuses) AS total_bonus, DENSE_RANK(ORDER BY total_bonus DESC) AS bonus_rank
FROM employees
GROUP BY employee_id;

我想要的输出是一个表,其中employee_id仅列出一次、对应total bonus amount the employee received的 和rank of bonuses starting from rank #1 with the highest total bonus amount.

4

2 回答 2

0

您可以在 ORDER BY 子句中使用计算出的 Bonus 值 - 无需担心密集的排名。

SELECT employee_id, SUM(bonuses) AS total_bonus
FROM employees
GROUP BY employee_id
ORDER BY SUM(bonuses) DESC
于 2017-01-23T04:38:06.240 回答
0

total_bonus除了您试图在DENSE_RANK()函数中使用与 a 相同级别的别名外,我认为您的查询没有任何问题SELECT。这无法完成,AFAIK,因为别名尚不可用。相反,只需SUM()再次使用该术语:

SELECT employee_id,
       SUM(bonuses) AS total_bonus,
       DENSE_RANK(ORDER BY SUM(bonuses) DESC) AS bonus_rank
FROM employees
GROUP BY employee_id;
于 2017-01-23T04:39:55.537 回答