mysql查询从每个部门获得前两个薪水

sat*_*yam 0 mysql

**Department table name** 
**following with fields name**

 id , empid ,salary ,departid ,status

如何在mysql中使用单个查询从每个部门获得前两个最高工资

Cod*_*der 10

SELECT emp1.departid , emp1.salary
FROM Department emp1
WHERE (
SELECT COUNT(DISTINCT(emp2.salary))
FROM Department emp2
WHERE emp2.salary > emp1.salary and emp1.departid  = emp2.departid ) in (0,1) group by emp1.departid , emp1.salary
Run Code Online (Sandbox Code Playgroud)

我在sql server中测试了这个解决方案.但我认为它也适用于ms sql.


pet*_*erm 9

尝试

SELECT id, empid, salary, departid, status
  FROM 
(
  SELECT id, empid, salary, departid, status, 
         @n := IF(@g = departid, @n + 1, 1) rownum,
         @g := departid
    FROM table1
   ORDER BY departid, salary DESC 
) q
 WHERE q.rownum <= 2
Run Code Online (Sandbox Code Playgroud)

这是SQLFiddle演示

它在内部生成的内容根据工资为每个部门的每个员工选择一个等级.然后在外部选择它过滤掉排名超过2(前两个)的所有行.