MySQL操作工资表,获取累计工资和月平均工资

根据一个实际的需求案例,描述一下:如何在工资条中添加获取累计工资[字段]和月平均工资[字段]

这个需求存在一个前后端分离的微服务EHR项目中,通过两个SQL语句来实现。业务逻辑:前端调用一个接口,返回两个对象。两个SQL语句就写在MyBatis中。

项目技术栈:前端vue.js + 后端Spring Cloud微服务

1、加入给出一张工资表,除了在前端页面显示这个人的工资条之外,还需要显示这个人的累计工资和月平均工资。

具体的需求如下:

1、首先,用户登录账户,点击工资条page,进入工资条界面,顶部有一个日期选择器,用户可以选择【年月】(没有具体到哪一天)。

2、其次,用户选择那个也,累计工资就计算到那个月,【即使现在是12月份,用户选择的是201805,工资条结果显示5月的工资,累计工资和月平均工资的计算也是截止到5月份,选择时间点后边的不考虑。】

3、最后,判断当前日期,如果当前日期是15号或者15号之前,则显示上个月的工资条;15号之后,则显示当月的工资条。

需求具体解析:

ps:想在项目中完成这个需求,需要掌握的知识点比较全面,需要掌握vue.js框架的知识、Spring Cloud框架、Spring框架、微服务的概念、MyBatis、MySQL等知识。这些就需要自己去学习啦~我们今天的侧重点在MySQL这一部分。

1、工资条中,有很多内容,但是存在与数据库中的工资表中,这样的话,把数据拿来显示就行了。这个不需要去分析。

2、主要是截止到选择的月份,进行计算累计工资和月平均工资。累计的拿出来了,月平均的也就好说了。

select

sum(total_theory_wages) AS wages_total , count(total_theory_wages) , sum(total_theory_wages) / count(total_theory_wages) AS wages_month_average from t_wages t where employee_id = 88888888 and (wages_time between 201801 and 201812)

每一行是一个小块,没对代码进行风格优化?。

字段说明:

total_theory_wages 应发工资

wages_month_average 月平均工资

wages_time 年月,例如‘201805’

1、首先,用sum()函数统计累计工资和。

在用count()统计一下次数,注意!这里我没有用截止月份减去起始月份

原因是可能期间有人因为某些原因,没有发工资,取值就会不正确。

这样这个问题就很好的解决了。

2、还有个问题。这里注意一下count(total_theory_wages)为0的情况,如果一个人上个月刚刚入职,还没法工资,虽然在前台看不到工资条数据(对于前台来说,是正确的现象;但是后台是会报错的。)

3、最后,判断当前日期,这个在前端用JavaScript写个if{}else{}代码块控制一下即可。

原文发布于微信公众号 - 数据库SQL(SQLdba)

原文发表时间:2018-12-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券