SQL查询emp表中的工资

Posted

技术标签:

【中文标题】SQL查询emp表中的工资【英文标题】:SQL query for salary in emp table 【发布时间】:2019-03-27 14:10:36 【问题描述】:

我有一张员工表。 我想知道具体的年度工资,或者今年是 2019 年,我想知道我在 2018 年向员工支付了多少工资(单个或全部员工)。那么如何编写查询。

【问题讨论】:

提供表结构、数据示例,以及您尝试过的内容 请向我们展示示例输入和输出数据。还请告诉我们您使用的是哪个版本的 SQL。 “SQL”只是一种语言,而不是实际产品。 我已经删除了那些冲突的 dbms 标签。放回其中一个,用于实际使用的产品。 这些是我的表格属性。开斋节,姓名,萨尔,加入日期,部门,地址 这在应用程序内部会更容易。您必须将每个薪水乘以:min(1, getYears(01/01/2019 - join_date)) 【参考方案1】:

你必须得到一年中工作的百分比,然后乘以薪水。如果joined_date 在当年1 月之前,请使用“1.00”。

由于您没有指定 SQL 类型,所以我选择了我最熟悉的 MSSQL。

这是一个使用 MSSQL 的示例:

DECLARE @yearToFindSalaryFor INT = 2018
DECLARE @dateEndOfSalaryYear DATE = ('01/01/' + 
                                     CONVERT(VARCHAR(5), (@yearToFindSalaryFor + 1)))
DECLARE @dateStartOfSalaryYear DATE = ('01/01/' + 
                                     CONVERT(VARCHAR(5), (@yearToFindSalaryFor)))

SELECT E1.YEARS_WORKED_FOR_YEAR, 
E2.sal * E1.YEARS_WORKED_FOR_YEAR AS SALARY_FOR_YEAR, E1.eid
FROM 
(
   SELECT 
   CASE WHEN joining_date > @dateEndOfSalaryYear
   THEN 0
   WHEN joining_date < @dateStartOfSalaryYear THEN 1
   -- cast one of the numbers as decimal, otherwise MSSQL will spit out an int value (1 or 0)
   -- since DATEDIFF will give INT value not decimal, we have to get 'days' and divide by 365
   ELSE DATEDIFF(day, joining_date, @dateEndOfSalaryYear)
       / CAST(365 AS DECIMAL(4, 0))
   END
   AS YEARS_WORKED_FOR_YEAR, eid FROM Employees
  ) AS E1
    JOIN Employees E2 ON E1.eid = E2.eid

小提琴示例:http://sqlfiddle.com/#!18/26485/34

【讨论】:

以上是关于SQL查询emp表中的工资的主要内容,如果未能解决你的问题,请参考以下文章

oracle

查询每个部门总工资,和每个部门的平均工资的sql语句?

处理单行的函数

Oracle SQL:经典查询练手第一篇

6分组查询

问题:oracle经典emp表,若要找出每种JOB中工资最高的员工的记录,该如何写查询SQL?