求出每个职称中工资最高、最低教师的姓名、性别、年龄、工资,并给出各职称的平 均工资。sqlserver
时间: 2023-08-09 22:09:19 浏览: 103
以下是 SQL Server 的查询语句,可以实现您的需求:
```
SELECT
t1.Title,
MAX(t1.Name) AS MaxName,
MAX(t1.Sex) AS MaxSex,
MAX(t1.Age) AS MaxAge,
MAX(t1.Salary) AS MaxSalary,
MIN(t2.Name) AS MinName,
MIN(t2.Sex) AS MinSex,
MIN(t2.Age) AS MinAge,
MIN(t2.Salary) AS MinSalary,
AVG(t1.Salary) AS AvgSalary
FROM
Teacher t1
INNER JOIN Teacher t2 ON t1.Title = t2.Title
GROUP BY
t1.Title
```
其中,假设教师信息存储在名为 `Teacher` 的表中,包含以下字段:`Name`(姓名)、`Sex`(性别)、`Age`(年龄)、`Salary`(工资)和 `Title`(职称)。
该查询语句使用了自连接(self join)来实现。首先以 `t1` 为主表,查询每个职称中工资最高的教师,然后以 `t2` 为主表,查询每个职称中工资最低的教师。最后按照职称分组,并计算出各职称的平均工资。
相关问题
求出每个职称中工资最高、最低教师的姓名、性别、年龄、工资,并给出各职称的平 均工资。职称有助教、讲师(包括工程师)、副教授(包括高级工程师)、教授(包括研究员)。sqlserver
好的,以下是 SQL Server 的查询语句:
```
-- 最高工资
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '助教'
ORDER BY
t.Salary DESC
UNION ALL
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '讲师'
ORDER BY
t.Salary DESC
UNION ALL
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '副教授'
ORDER BY
t.Salary DESC
UNION ALL
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '教授'
ORDER BY
t.Salary DESC
-- 最低工资
UNION ALL
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '助教'
ORDER BY
t.Salary ASC
UNION ALL
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '讲师'
ORDER BY
t.Salary ASC
UNION ALL
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '副教授'
ORDER BY
t.Salary ASC
UNION ALL
SELECT TOP 1
t.Name, t.Sex, t.Age, t.Salary, t.Title
FROM
Teacher t
WHERE
t.Title = '教授'
ORDER BY
t.Salary ASC
-- 平均工资
UNION ALL
SELECT
NULL, NULL, NULL, AVG(t.Salary), t.Title
FROM
Teacher t
GROUP BY
t.Title
```
其中,假设教师信息存储在名为 `Teacher` 的表中,包含以下字段:`Name`(姓名)、`Sex`(性别)、`Age`(年龄)、`Salary`(工资)和 `Title`(职称)。
用T-SQL程序求出每个职称中工资最高、最低教师的姓名、性别、年龄、工资,并给出各职称的平均工资。职称有助教、讲师(包括工程师)、副教授(包括高级工程师)、教授(包括研究员)
好的,以下是 T-SQL 程序:
```
SELECT
职称,
MAX(工资) AS 最高工资,
MIN(工资) AS 最低工资,
MAX(CASE WHEN 工资 = t1.最高工资 THEN 姓名 END) AS 最高工资教师姓名,
MAX(CASE WHEN 工资 = t1.最高工资 THEN 性别 END) AS 最高工资教师性别,
MAX(CASE WHEN 工资 = t1.最高工资 THEN 年龄 END) AS 最高工资教师年龄,
MAX(CASE WHEN 工资 = t1.最低工资 THEN 姓名 END) AS 最低工资教师姓名,
MAX(CASE WHEN 工资 = t1.最低工资 THEN 性别 END) AS 最低工资教师性别,
MAX(CASE WHEN 工资 = t1.最低工资 THEN 年龄 END) AS 最低工资教师年龄,
AVG(工资) AS 平均工资
FROM
教师表
GROUP BY
职称
ORDER BY
CASE 职称
WHEN '助教' THEN 1
WHEN '讲师' THEN 2
WHEN '副教授' THEN 3
WHEN '教授' THEN 4
END ASC
```
假设教师表的表名为“教师表”,包含以下字段:姓名、性别、年龄、职称、工资。程序中使用了 MAX、MIN、AVG 聚合函数,以及 CASE WHEN 结构。其中,MAX(CASE WHEN ...) 是一种常见的求条件下的最大值的方法。
请注意,以上程序可能需要根据实际情况进行调整,以适应不同的数据库和数据结构。