MySQl获取各部门的工资

MySQl获取各部门的工资,mysql,sql,Mysql,Sql,我怎样才能拿到每个部门前两名的薪水?表如下所示: ------------------------- name dept sal ------------------------- name1 CSE 100000 name2 CSE 200000 name3 ECE 200000 name4 EEE 400000 name5 CSE 700000 name6 ECE 6

我怎样才能拿到每个部门前两名的薪水?表如下所示:

-------------------------
name     dept      sal
-------------------------
name1    CSE       100000
name2    CSE       200000
name3    ECE       200000
name4    EEE       400000
name5    CSE       700000
name6    ECE       600000

您需要使用聚合函数SUM和GROUP BY子句


在状态中使用限制提示:

不要认为在一条SQL语句中就可以获得数据。如果您想使用SQL实现它,那么需要使用一个存储过程,该过程将循环遍历所有部门,并使用limit和order by获取前2个工资行

第一部门

第二部门

上面的每个查询将显示每个部门的前两个结果

更新:

请尝试此查询

select * from (
 SELECT  DISTINCT dept
        FROM    tableName )a
join tableName b
on a.dept >=b.dept
and 
a.dept <=b.dept
and sal >=(
select sal from tableName 
  where a.dept=b.dept
  order by sal limit 1,1
)

请看我的答案,它将根据您的要求运行:@Aziz Shaikh:首先理解问题并发布您的答案选择d职业,从emp中选择maxsal,其中d职业为firstsal,从emp中选择sal,其中profession like d order by sal desc limit 1,1作为secondsal,从emp GROUP by Professional中选择sal,但我需要一个查询来获取每个部门中的所有记录选择profession作为d,从emp中选择maxsal,其中profession like d作为firstsal,从emp中选择sal,其中sal desc limit 1的d order等专业作为emp GROUP by profession的secondsal使用limit和并排列可以检索任何数据。如果这很好,但我希望数据以表格的形式出现,这样在编程上,将来处理数据和更改或更新会更容易。这完全取决于一个人的要求!:祝贺你的解决方案,顺便说一句!
SELECT dept
FROM  `Table` 
WHERE dept = 'CSE'
ORDER BY sal DESC 
LIMIT 0 , 2
SELECT dept
FROM  `Table` 
WHERE dept = 'ECE' 
ORDER BY sal DESC 
LIMIT 0 , 2
SELECT dept, sal
FROM  `tbl_practice` 
WHERE dept =  'CSE'
OR dept =  'ECE'
ORDER BY sal DESC 
LIMIT 0 , 4
select * from (
 SELECT  DISTINCT dept
        FROM    tableName )a
join tableName b
on a.dept >=b.dept
and 
a.dept <=b.dept
and sal >=(
select sal from tableName 
  where a.dept=b.dept
  order by sal limit 1,1
)
 select profession as d,(select max(sal) 
 from emp where profession like d) as firstsal,(
 select sal from emp 
 where profession like d order by sal desc limit 1,1) as secondsal from emp 
 GROUP BY profession