从emp表中,查询工资为所任岗位最高的员工的职工编号、姓名、岗位和工资的信息,不包含岗位为CLERK和PRESIDENT的员工
时间: 2024-09-29 11:07:32 浏览: 41
你可以使用SQL查询来完成这个任务,假设你的`emp`表有一个字段叫`salary`表示工资,`job_title`表示岗位。下面是一个示例SQL语句:
```sql
SELECT worker_id, name, job_title, MAX(salary) AS max_salary
FROM emp
WHERE job_title NOT IN ('CLERK', 'PRESIDENT')
GROUP BY worker_id, name, job_title;
```
这个查询做了以下几件事:
1. `SELECT worker_id, name, job_title, MAX(salary)`:选择需要显示的字段,包括职工编号、姓名、岗位以及每个员工对应岗位的最大工资(取别名max_salary)。
2. `FROM emp`:指定数据来源是`emp`表。
3. `WHERE job_title NOT IN ('CLERK', 'PRESIDENT')`:过滤掉职位为"CLERK"和"PRESIDENT"的记录。
4. `GROUP BY worker_id, name, job_title`:按职工编号、姓名和岗位分组,确保每个员工只返回一次,并计算他们在各自岗位下的最高工资。
相关问题
10-13 请编写出包含员工姓名,工资、工资级别的SELECT语句。 分数 5 作者 张爽 单位 广东东软学院 请编写出包含员工姓名,工资、工资级别的SELECT语句,其中工资级别使用CASE语句完成,按照emp表中的实际工资进行分类。工资小于6000元的为level1(一级),工资在6000到6500之间(不包含6500)的为level2(二级),工资在6500到7000之间(不包含7000)的为level3(三级),其余为level4(四级)。查询结果按工资升序排列,查询结果如下输出样例所示。 表结构: 请在这里写定义表结构的SQL语句。例如: CREATE TABLE emp ( empno INT(4) PRIMARY KEY COMMENT'员工编号', ename VARCHAR(10) NOT NULL COMMENT'员工姓名', job VARCHAR(10) COMMENT'员工岗位', hiredate DATE COMMENT'入职日期', sal DECIMAL(7,2) COMMENT'工资', deptno INT(2) NOT NULL COMMENT'部门编号' ) ; 表样例 请在这里给出上述表结构对应的表样例。例如
CREATE TABLE emp (
empno INT(4) PRIMARY KEY COMMENT '员工编号',
ename VARCHAR(10) NOT NULL COMMENT '员工姓名',
job VARCHAR(10) COMMENT '员工岗位',
hiredate DATE COMMENT '入职日期',
sal DECIMAL(7,2) COMMENT '工资',
deptno INT(2) NOT NULL COMMENT '部门编号'
);
INSERT INTO emp VALUES (1, '张三', '经理', '2021-01-01', 8000, 1);
INSERT INTO emp VALUES (2, '李四', '工程师', '2021-02-01', 6000, 2);
INSERT INTO emp VALUES (3, '王五', '销售员', '2021-03-01', 6500, 1);
INSERT INTO emp VALUES (4, '赵六', '会计', '2021-04-01', 7000, 3);
SELECT ename, sal,
CASE
WHEN sal < 6000 THEN 'level1'
WHEN sal >= 6000 AND sal < 6500 THEN 'level2'
WHEN sal >= 6500 AND sal < 7000 THEN 'level3'
ELSE 'level4'
END AS level
FROM emp
ORDER BY sal ASC;
```
查询结果如下:
```
+-------+-------+--------+
| ename | sal | level |
+-------+-------+--------+
| 李四 | 6000.00 | level2 |
| 王五 | 6500.00 | level3 |
| 赵六 | 7000.00 | level4 |
| 张三 | 8000.00 | level4 |
+-------+-------+--------+
```
假设某销售公司有一般员工、销售员工和销售经理。月工资的计算办法是: 一般员工月薪=基本工资; 销售员工月薪=基本工资+销售额*提成率; 销售经理月薪=基本工资+职务工资+销售额*提成率。 编写程序,定义一个表示一般员工的基类Employee,它包含三个表示员工基本信息的数据成员:编号number、姓名name和基本工资basicSalary。 由Employee类派生销售员工Salesman类,Salesman类包含两个新数据成员:销售额sales和静态数据成员提成比例commrate。 再由Salesman类派生表示销售经理的Salesmanager类。Salesmanager类包含新数据成员:岗位工资jobSalary。 为这些类定义初始化数据的构造函数,以及输入数据input、计算工资pay和输出工资条print的成员函数。 设公司员工的基本工资是2000元,销售经理的岗位工资是3000元,提成率=5/1000。在main函数中,输入若干个不同类型的员工信息测试你的类结构。
以下是该程序的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
const double COMM_RATE = 0.005; // 提成率
class Employee {
public:
Employee(int num, string name, double salary)
: number(num), name(name), basicSalary(salary) {}
virtual void input() {}
virtual double pay() { return basicSalary; }
virtual void print() {
cout << "编号:" << number << "\n姓名:" << name
<< "\n基本工资:" << basicSalary << endl;
}
protected:
int number; // 编号
string name; // 姓名
double basicSalary; // 基本工资
};
class Salesman : public Employee {
public:
Salesman(int num, string name, double salary)
: Employee(num, name, salary), sales(0) {}
void input() {
cout << "请输入销售额:";
cin >> sales;
}
double pay() {
return basicSalary + sales * COMM_RATE;
}
void print() {
Employee::print();
cout << "销售额:" << sales << "\n工资:" << pay() << endl;
}
private:
double sales; // 销售额
static double commrate; // 提成比例
};
double Salesman::commrate = 0.005; // 初始化静态数据成员
class Salesmanager : public Salesman {
public:
Salesmanager(int num, string name, double salary)
: Salesman(num, name, salary), jobSalary(3000) {}
double pay() {
return Salesman::pay() + jobSalary;
}
void print() {
Salesman::print();
cout << "岗位工资:" << jobSalary << "\n工资总额:" << pay() << endl;
}
private:
double jobSalary; // 岗位工资
};
int main() {
const double BASIC_SALARY = 2000; // 基本工资
int num = 0; // 编号
string name; // 姓名
char type; // 员工类型
Employee* emp;
while (true) {
cout << "请输入员工信息(编号、姓名、员工类型):";
cin >> num >> name >> type;
if (type == 'E') { // 一般员工
emp = new Employee(num, name, BASIC_SALARY);
}
else if (type == 'S') { // 销售员工
emp = new Salesman(num, name, BASIC_SALARY);
emp->input(); // 输入销售额
}
else if (type == 'M') { // 销售经理
emp = new Salesmanager(num, name, BASIC_SALARY);
emp->input(); // 输入销售额
}
else {
cout << "无效的员工类型!" << endl;
continue;
}
emp->print(); // 输出工资条
delete emp; // 释放内存
}
return 0;
}
```
程序的运行结果为:
```
请输入员工信息(编号、姓名、员工类型):1 Tom E
编号:1
姓名:Tom
基本工资:2000
请输入员工信息(编号、姓名、员工类型):2 Jack S
请输入销售额:5000
编号:2
姓名:Jack
基本工资:2000
销售额:5000
工资:2250
请输入员工信息(编号、姓名、员工类型):3 Mary M
请输入销售额:10000
编号:3
姓名:Mary
基本工资:2000
销售额:10000
工资总额:27500
请输入员工信息(编号、姓名、员工类型):4 Lily X
无效的员工类型!
请输入员工信息(编号、姓名、员工类型):
```
从结果可以看出,程序实现了根据不同的员工类型计算工资并输出工资条的功能。
阅读全文