【问题标题】:SQL return 4 columns including only the maximum and minimum salary for each department labeled as "highest salary" and "lowest salary" using CASESQL 返回 4 列,仅包括使用 CASE 标记为“最高薪水”和“最低薪水”的每个部门的最高和最低薪水
【发布时间】:2022-01-07 15:57:35
【问题描述】:

这很尴尬,我一直在争论要不要用这个来打扰你们。这篇文章的每一个方面都将展示我是一个多么完整的新手,所以请提前接受我的大量道歉。我正在学习 sql,最近几天我一直在尝试解决这个作业问题。我应该使用相关子查询和 CASE 条件表达式编写一个查询,以从我的“员工”表中返回 4 列:部门、名字、薪水以及最后一列“salary_in_department”下的薪水是否是“最高薪水”或“最低工资”。所以我应该只返回每个部门的两个薪水,只有最高薪水和最低薪水。

我一直在更改查询的这部分和那部分,每次都出现错误,或者每个部门的所有薪水都在“salary_in_department”的第 4 列中返回为最高薪水。我已经在网上搜索了我能想到的所有内容,从“sql 如何在同一选择语句中查询每个部门的最低和最高薪水”到“sql 子查询别名错误”到“每个部门的 sql 最低和最高薪水”到“sql使用 CASE 的最低和最高工资”到“使用子查询的每个部门的最低和最高工资”等。

这是我最近的尝试:

选择部门、名字、薪水、a.salary_in_department

FROM(选择部门、名字、薪水,

CASE WHEN Salary = MIN(salary) THEN 'LOWEST SALARY'

当薪水 = MAX(salary) THEN 'HIGHEST SALARY'

END 作为salary_in_department

来自员工

GROUP BY 部门、名字、薪水)a

GROUP BY 部门,名字,薪水,salary_in_department

按部门排序

关于如何着手或如何更好地自己研究它的任何建议,这样我就不必用基本问题来困扰这里的人们了?或者,如果我正在发布虚假信息,请同时指出这些内容。在我的谷歌搜索的 stackoverflow 上的所有答案中,我无法根据我的特定情况调整点点滴滴。

【问题讨论】:

  • 请将代码发布为文本而不是图像。
  • 谢谢。我也想显示结果,但我现在要更改它。谢谢指正。

标签: sql case correlated-subquery


【解决方案1】:

在桌子上做一个最小值和一个最大值,按部门分组,然后按部门和薪水加入:

declare @table table (
department varchar(20),
name varchar(20),
salary decimal(20,2))

insert into @table select 'Finance', 'Jim', 120000
insert into @table select 'Finance', 'John', 80000
insert into @table select 'IT', 'Doug', 200000
insert into @table select 'IT', 'Jane', 250000
insert into @table select 'IT', 'Mike', 50000
insert into @table select 'IT', 'Mary', 55000


select
    t.department,
    t.name,
    t.salary,
    case
        when not maxTbl.MaxItem is null then 'Highest Salary' 
        else 
            case when not minTbl.MinItem is null then 'Lowest Salary' else '' end end as [Salary In Department]
from 
    @table t
    left join (select department, Max(salary) as MaxItem from @table group by department) maxTbl on t.department = maxTbl.department and t.salary = maxTbl.MaxItem
    left join (select department, Min(salary) as MinItem from @table group by department) minTbl on t.department = minTbl.department and t.salary = minTbl.MinItem

【讨论】:

  • 谢谢你,乔希。我会研究你是怎么做到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2021-03-04
  • 2016-07-24
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多