精华内容
下载资源
问答
  • 一开始我的做法是10w*(每个人的工资/全部人工资之和),计算出每个人应得的金额,round函数用来精确小数点后几位 SELECT e_id '员工id',e_salary '薪资',ROUND((100000*e_salary/(SELECT SUM(e_salary) FROM ...

    最近公司有这样一个需求:如果有10万奖金,要分摊给员工,按每个人的实际能力分摊,要求不能有剩余。看到网上并没有相关的帖子,于是借此记录下我的解题思路。


    一开始我的做法是用10w*(每个人的工资/全部人工资之和),计算出每个人应得的金额,round函数用来精确小数点后几位
    SELECT e_id '员工id',e_salary '薪资',ROUND((100000*e_salary/(SELECT SUM(e_salary) FROM employee)),2) '奖金' FROM employee
    
    图1 数据库设计
    图2 错误查询结果
    但这个分摊如果有除不尽的情况就会使分得的奖金加起来总和不等于10w(上图中总和为100000.01),特别是每个员工薪资相同时会出现更明显的除不尽问题
    图3 相同薪资出现的除不尽情况
    这时候我想起了小学时学过的知识:最后一个人的奖金应该等于10w减去其他人的奖金之和,奖金总和是sum(奖金)我们都知道,但sql语句又该怎么写?直接加上sum(奖金)是万万行不通的,就当我黔驴技穷的时候,union all 帮我解决了这一问题!

    稍微理下思路:

    1. 计算每个人奖金的时候应该先把最后一个员工去掉,把查询结果当做表1
    2. 通过10w-sum(奖金)就得到了最后一个员工应得的金额,然后查出他的其他字段作为表2
    3. 将表1和表2通过union all关键字纵向合并成一张表
    最后的sql语句应该是这样的:
    SELECT e_id '员工id',e_salary '薪资',ROUND((100000*e_salary/(select sum(e_salary) from employee)),2) '奖金' 
    FROM employee 
    WHERE e_id != (SELECT MAX(e_id) FROM employee LIMIT 1)
    //这句话是在查询时将最后一名员工排除,查出其他员工奖金
    
    UNION ALL //上下合并
    
    SELECT e_id '员工id',e_salary '薪资',100000-(SELECT SUM(t1.奖金) 
    FROM 
    (SELECT e_id '员工id',e_salary '薪资',ROUND((100000*e_salary/(SELECT SUM(e_salary) FROM employee)),2) '奖金' FROM employee WHERE e_id != (SELECT MAX(e_id) FROM employee LIMIT 1)) t1) '奖金' 
    FROM employee 
    WHERE e_id = (SELECT MAX(e_id) FROM employee LIMIT 1)
    //这句话是先将之前查出的结果作为一张新表,取出其中奖金字段计算总和并与10w相减,产生的数据就是最后一名员工的奖金,再通过
    //SELECT e_id '员工id',e_salary '薪资' WHERE e_id = (SELECT MAX(e_id) FROM employee LIMIT 1) 这句话与奖金拼接,
    //就产生另一张表,里面是最后一名员工的数据,最后两表通过 UNION ALL 关键字合并,注意合并的时候要确保两张新表字段都相同
    
    图4 最终查询结果
    展开全文
  • SQL语法大全

    2014-03-30 11:00:11
    rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\'...
  • 6.2.4 标识SQL语句以便以后取回计划 153 6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP...
  • 6.2.4 标识SQL语句以便以后取回计划 153 6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    全书包括窗体与界面设计、控件应用、组件应用、图形技术、多媒体技术、文件系统、操作系统与Windows相关程序、注册表、数据库技术、SQL查询相关技术、LINQ查询技术、报表与打印技术、图 表技术、硬件相关开发技术、...
  • 全书包括窗体与界面设计、控件应用、组件应用、图形技术、多媒体技术、文件系统、操作系统与Windows相关程序、注册表、数据库技术、SQL查询相关技术、LINQ查询技术、报表与打印技术、图 表技术、硬件相关开发技术、...
  • 全书包括窗体与界面设计、控件应用、组件应用、图形技术、多媒体技术、文件系统、操作系统与Windows相关程序、注册表、数据库技术、SQL查询相关技术、LINQ查询技术、报表与打印技术、图 表技术、硬件相关开发技术、...
  •  数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...
  • 实例280 判断计算机中是否安装了SQL软件 378 第8章 注册表 380 8.1 个性桌面 381 实例281 禁用桌面选项卡 381 实例282 禁用外观选项卡 382 实例283 禁用屏幕保护选项卡 383 实例284 设置任务栏时间样式 383 8.2 ...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、即。 第1章 窗体...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、即。 第1章 窗体...
  • 全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、即。 第1章 窗体...
  • 全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、即。 第1章 窗体...
  • 任务156: 如何用图表讲故事? 任务157: Tableau家族产品 任务158: Tableau发展历程 任务159: Tableau产品优势 任务160: Tableau Desktop安装配置 任务161: Tableau的导航与菜单 任务162: Tableau设计流程最佳...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    6.在SQL语句中,用于向表中插入数据的语句是Insert。 7.如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用Select语句。 8.使用Describe命令可以显示表的结构信息。 9.使用SQL*Plus的Get命令可以将...
  • 8.一条SQL语句 查询出每门课都大于80分的学生姓名 100 9.所有部门之间的比赛组合 100 10.每个月份的发生额都比101科目多的科目 101 11.统计每年每月的信息 102 12.显示文章标题,发帖人、最后回复时间 103 13.删除...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写操作类实例 VC++版源代码统计工具 内含自绘CMenu、CButton、CDialog、CStatic、CListCtrl等。 VC++6.0 控制摄像头 ...
  • 综合案例 - 工资结算系统 / 图书自动折扣系统 / 自定义分数类 Day10 - 图形用户界面和游戏开发 使用tkinter开发GUI程序 使用pygame三方库开发游戏应用 “大球吃小球”游戏 Day11 - 文件和异常 读文件 - 读取...
  • 学生学籍管理信息系统

    热门讨论 2009-05-28 14:51:27
    数据库服务器端软件Microsoft Access2000 + SQL查询语句。 3.数据描述 1. 数据流程图: 户 系统登录 初始化 新生报到 信息录入 分班开始学习 结束 退出登录 录入成绩 考试 信息修改及打印 2.针对这个...
  • c++ 面试题 总结

    2009-09-16 08:44:40
    15.C++写个程序,如何判断一个操作系统是16位还是32位的?不能sizeof()函数 A1: 16位的系统下, int i = 65536; cout ; // 输出0; int i = 65535; cout ; // 输出-1; 32位的系统下, int i = 65536; cout ; ...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

如何用sql语句计算工资