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