如何查询DIPENDENTI表中对应岗位最低工资的员工姓名?
按岗位查询最低工资员工姓名的SQL方案
嘿,我来帮你搞定这个问题!你需要从DIPENDENTI表中找出每个岗位(MANSIONE)里拿最低工资的员工姓名(NOME_IMP)对吧?下面给你两种实用的SQL写法,适配不同的数据库场景:
方法一:关联子查询(兼容性强,适合所有主流数据库)
这种方法先算出每个岗位的最低工资,再和原表匹配找到对应员工:
SELECT d.NOME_IMP, d.MANSIONE, d.STIPENDIO FROM DIPENDENTI d INNER JOIN ( -- 子查询:按岗位分组,计算每个岗位的最低工资 SELECT MANSIONE, MIN(STIPENDIO) AS MIN_STIPENDIO FROM DIPENDENTI GROUP BY MANSIONE ) m ON d.MANSIONE = m.MANSIONE AND d.STIPENDIO = m.MIN_STIPENDIO;
说明:如果同一个岗位有多个员工拿相同的最低工资,他们都会被查询出来,这符合大多数场景的需求。
方法二:窗口函数(适合支持SQL:2003及以上的数据库,比如MySQL 8+、PostgreSQL、Oracle)
如果你用的数据库支持窗口函数,这种写法更简洁灵活:
SELECT NOME_IMP, MANSIONE, STIPENDIO FROM ( SELECT NOME_IMP, MANSIONE, STIPENDIO, -- 按岗位分区,按工资升序排名,最低工资的员工排名为1 RANK() OVER (PARTITION BY MANSIONE ORDER BY STIPENDIO ASC) AS rank_num FROM DIPENDENTI ) ranked WHERE rank_num = 1;
小提示:这里用RANK()而不是ROW_NUMBER()是因为如果同一岗位有多人工资相同且都是最低,RANK()会把他们都标记为排名1,而ROW_NUMBER()会随机给他们分配不同排名,只返回一个。你可以根据实际需求调整。
内容的提问来源于stack exchange,提问作者Daniele Ligato
相关产品推荐
相关产品推荐

