【发布时间】:2022-01-19 15:31:34
【问题描述】:
我有员工和员工详细信息表。在 Employee 表中,它有 Id(Primary Key), Name, Gender, Joining Date, Department 等列。
在员工详细信息表中,它有 Id(Primary Key), Employee Table Id(Foreign Key), Current Salary, Daily login Time, Daily logout time 等列。
我想要实现的是,找到本月的 STAR 员工。公式是,
- 首先我需要根据月份找到每个员工的出勤率, 我能够做到,以下是结果。
| Id | Name | Attendance | Month |
|---|---|---|---|
| 1 | Ryan | 20 | January |
| 2 | Joanna | 19 | January |
| 3 | Tom | 21 | January |
| 4 | Lucy | 10 | January |
| 5 | Frank | 15 | January |
| 6 | Jane | 17 | January |
| 7 | Robert | 11 | January |
| 8 | Ryan | 18 | February |
| 9 | Joanna | 17 | February |
| 10 | Tom | 20 | February |
| 11 | Lucy | 16 | February |
| 12 | Frank | 15 | February |
| 13 | Jane | 17 | February |
| 14 | Robert | 11 | February |
| 15 | Ryan | 22 | March |
| 16 | Joanna | 19 | March |
| 17 | Tom | 11 | March |
| 18 | Lucy | 10 | March |
| 19 | Frank | 15 | March |
| 20 | Jane | 17 | March |
| 21 | Robert | 15 | March |
- 然后我需要找到当月的最高出勤率,而最低出勤率将减少 15%,如果有任何员工落在此范围内,那么该员工将成为当月的 STAR 员工。
在第二步中,我面临所有问题。我能够获得最高和最低出勤率,但无法比较。
这是我的计算查询:
SELECT MAX(Attendance) AS [Highest Attendance],
MAX(Attendance) - ( MAX(Attendance) * .15 ) AS [Lowest Attendance], Month
FROM Employee
GROUP BY Month;
谁能帮我解决这个问题? 我正在使用 SQL Server 2017。
这里有一些虚拟数据来创建上述场景:
-- create a table
CREATE TABLE Employee (
Id int PRIMARY KEY,
Name varchar(100) NOT NULL,
Attendance int NOT NULL,
Month varchar(20) NOT NULL
);
-- insert some values
INSERT INTO Employee VALUES (1, 'Ryan', 20, 'January');
INSERT INTO Employee VALUES (2, 'Joanna', 19, 'January');
INSERT INTO Employee VALUES (3, 'Tom', 21, 'January');
INSERT INTO Employee VALUES (4, 'Lucy', 10, 'January');
INSERT INTO Employee VALUES (5, 'Frank', 15, 'January');
INSERT INTO Employee VALUES (6, 'Jane', 17, 'January');
INSERT INTO Employee VALUES (7, 'Robert', 11, 'January');
INSERT INTO Employee VALUES (8, 'Ryan', 18, 'February');
INSERT INTO Employee VALUES (9, 'Joanna', 17, 'February');
INSERT INTO Employee VALUES (10, 'Tom', 20, 'February');
INSERT INTO Employee VALUES (11, 'Lucy', 16, 'February');
INSERT INTO Employee VALUES (12, 'Frank', 15, 'February');
INSERT INTO Employee VALUES (13, 'Jane', 17, 'February');
INSERT INTO Employee VALUES (14, 'Robert', 11, 'February');
INSERT INTO Employee VALUES (15, 'Ryan', 22, 'March');
INSERT INTO Employee VALUES (16, 'Joanna', 19, 'March');
INSERT INTO Employee VALUES (17, 'Tom', 11, 'March');
INSERT INTO Employee VALUES (18, 'Lucy', 10, 'March');
INSERT INTO Employee VALUES (19, 'Frank', 15, 'March');
INSERT INTO Employee VALUES (20, 'Jane', 17, 'March');
INSERT INTO Employee VALUES (21, 'Robert', 15, 'March');
我的预期示例输出如下:
| Name | Month | Employee Attendance | Highest Attendance | Lowest Attendance | Status |
|---|---|---|---|---|---|
| Ryan | January | 20 | 21 | 17.85 | STAR EMPLOYEE |
【问题讨论】:
-
我使用的是 SQL Server 18 - 仅供参考,你不是。您的选择是 2012/2014/2016/2017/2019。
-
@Stu 对不起,我的错,更新了。
-
为什么是 Ryan January 的明星员工,而不是 21 对 20 的 Tom?
-
不不不,它们都可以,theta 只是一个例子。
标签: sql sql-server