取每个员工最后一个月的的工资详情

5 篇文章 0 订阅
3 篇文章 0 订阅

有两张表,一张是员工信息表T_EMP_INFO,字段有USER_ID,USER_NANE;一张是工资表T_WAGE_INFO,字段有ID,USER_ID(关联员工表字段),SALERY(工资),MONTH(月份);


1、查询每位员工最近一个月发工资的情况:

SELECT e.NAME,MAX(d.MONTH),d.*
 from T_EMP_INFO e LEFT JOIN T_WAGE_INFO d on d.USER_ID= e.USER_ID

GROUP BY d.USER_ID


2、查询张三的发工资情况,按发放的时间由远到近:

SELECT e.NAME , d.*
 FROM t_emp_info e LEFT JOIN T_WAGE_INFO d on d.USER_ID= e.USER_ID

 WHERE d.NAME= '张三' 

ORDER BY d.MONTH

3、查询所有工资发放情况,由近到远:

SELECT e. NAME, d.* FROM t_emp_info e
LEFT JOIN T_WAGE_INFO d ON d.USER_ID= e.USER_ID
ORDER BY d.NAME DESC,d.MONTH DESC


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这是一个经典的面向对象设计问题。我们可以先定义一个Employee类,然后让不同类型的员工类继承Employee类,最后在主程序中创建一个Employee变量数组,并对每个Employee显示其相关信息。 首先,我们定义一个Employee类,它有员工工号、姓名和出生年三个属性,以及一个计算收入的方法getMonthlySalary。代码如下: ```python import datetime class Employee: def __init__(self, emp_id, name, birthdate): self.emp_id = emp_id self.name = name self.birthdate = birthdate def getMonthlySalary(self): pass ``` 接下来,我们定义四个不同类型的员工类,它们分别继承Employee类,并实现自己的计算收入的方法。 第一个是领固定薪的SalariedEmployee类,它的薪就是固定的工资。代码如下: ```python class SalariedEmployee(Employee): def __init__(self, emp_id, name, birthdate, monthly_salary): super().__init__(emp_id, name, birthdate) self.monthly_salary = monthly_salary def getMonthlySalary(self): return self.monthly_salary ``` 第二个是计时酬的HourlyEmployee类,它的薪是按照工时和时薪计算的。如果一工时超过160小时,则还需对额外的工时支付加班费。代码如下: ```python class HourlyEmployee(Employee): def __init__(self, emp_id, name, birthdate, hourly_wage, hours_worked): super().__init__(emp_id, name, birthdate) self.hourly_wage = hourly_wage self.hours_worked = hours_worked def getMonthlySalary(self): if self.hours_worked <= 160: return self.hourly_wage * self.hours_worked else: overtime_pay = (self.hours_worked - 160) * self.hourly_wage * 1.5 return self.hourly_wage * 160 + overtime_pay ``` 第三个是按销售额提成的CommissionEmployee类,它的薪是按照销售额和提成比例计算的。代码如下: ```python class CommissionEmployee(Employee): def __init__(self, emp_id, name, birthdate, sales, commission_rate): super().__init__(emp_id, name, birthdate) self.sales = sales self.commission_rate = commission_rate def getMonthlySalary(self): return self.sales * self.commission_rate ``` 第四个是带底薪并按销售额提成的BasePlusCommissionEmployee类,它的薪是按照销售额、提成比例和底薪计算的。代码如下: ```python class BasePlusCommissionEmployee(Employee): def __init__(self, emp_id, name, birthdate, sales, commission_rate, base_salary): super().__init__(emp_id, name, birthdate) self.sales = sales self.commission_rate = commission_rate self.base_salary = base_salary def getMonthlySalary(self): return self.base_salary + self.sales * self.commission_rate ``` 最后,在主程序中创建Employee变量数组,保存Employee类层次结构中每个具体类对象的引用,并对每个Employee显示其工号、姓名、出生年收入,如果当是Employee的生日所在的份,则还另发给他100作为红包。代码如下: ```python employees = [ SalariedEmployee("E001", "Alice", datetime.date(1990, 1, 1), 2000), HourlyEmployee("E002", "Bob", datetime.date(1995, 2, 2), 20, 180), CommissionEmployee("E003", "Charlie", datetime.date(1985, 3, 3), 30000, 0.05), BasePlusCommissionEmployee("E004", "David", datetime.date(1980, 4, 4), 40000, 0.03, 3000) ] today = datetime.date.today() for emp in employees: monthly_salary = emp.getMonthlySalary() if emp.birthdate.month == today.month: monthly_salary += 100 print("Emp ID: {}, Name: {}, Birthdate: {}, Monthly Salary: {}".format(emp.emp_id, emp.name, emp.birthdate, monthly_salary)) ``` 这样就完成了整个工资支付系统的设计和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你不懂程序员的Bug

打赏点吧, 不容易啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值