2012-04-20 101 views
0

我真的很困惑如何为以下语句编写查询。SQL查询 - 需要建议

如何显示具有最高销售数量(总数)和显示位置的前5名员工作为字段。请注意,如果两个员工的总销售价值相同,他们应该获得相同的职位,换句话说,前五名员工可能会返回超过5名员工?

任何人都可以为此提出答案吗?

+2

你试过了什么?你能显示一些数据库结构吗?还有一些数据例子? – Arion 2012-04-20 10:35:08

+0

因此,如果前五名排名中有五名以上的员工,您想如何管理?例如,如果您有一名员工有100名销售员,然后有5名员工有90名,然后有80名员工,您是否希望您的“前五名销售分数”列表中的前六名,或者是否想要放弃其中一名员工有一个“前5名销售人员”的名单,如果有的话,你有什么标准选择谁下降? – glenatron 2012-04-20 10:35:51

+0

如果不止一名员工具有相同的总销售价值,则需要将所有员工列入“前五名”。 – manju 2012-04-20 10:39:50

回答

0

喜欢的东西:

WITH cte AS (
    SELECT 
     Rank() OVER (ORDER BY SUM(salary) DESC) AS [Rank] 
     , SUM(salary) as sum 
     , Employee 
    FROM 
     [table] 
    GROUP BY 
     Employee 
) 
SELECT * 
FROM cte 
WHERE [RANK] < 5 
ORDER BY sum DESC  

我重读你的问题,看来你要找的销售,而不是工资的总和的顶部计数,但当然,在这种情况下,你可以在OVER语句中使用COUNT(sales)