操纵sql表以获取一天中被超额预订的员工

时间:2018-10-08 23:54:37

标签: mysql sql select group-by

我有3张桌子

1. Employees (empid, lname, fname, emptype, cellphone, homphone, ftpt)
2. Schedule(date, empid, dept_name, start_time, shift_length)
3. Departments(dept_name, dept manager)`

我们必须生成一个表,其中列出了每天被安排多次以上而被超额预定的所有员工。

select语句后的最终表应如下所示:

它由员工ID排序。

这是3个表的创建表:

CREATE TABLE Departments(department_name VARCHAR(30));
CREATE TABLE Employees(empid int PRIMARY KEY NOT NULL, lname VARCHAR(20) NOT NULL, fname VARCHAR(20) NOT NULL, emptype VARCHAR(5) NOT NULL, cellphone VARCHAR(20), homephone VARCHAR(20), ftpt VARCHAR(3) NOT NULL);
CREATE TABLE Schedule(date VARCHAR(20) NOT NULL, empid INT NOT NULL, department VARCHAR(30) NOT NULL, start_time VARCHAR(5) NOT NULL, shift_length INT NOT NULL );

样本数据Schedule EMPLOYEES

包含数据的文件- https://drive.google.com/drive/folders/1hSf4rbGOvqrTZVyPaveF6fUAKB29Q2o_?usp=sharing

1 个答案:

答案 0 :(得分:0)

您提供的某些列名称不一致,因此您可能需要更改其中的一些以匹配数据库中的实际名称。但这应该可以帮助您入门。

SELECT empid, lname as lastName, fname as firstName, date as [OVERBOOKED DATE], start_time as sfrom, Departments.dept_name as dname, dept_manager as MANAGER FROM Employees JOIN Schedule ON Employees.empid=Schedule.empid JOIN Departments on Schedule.dept_name=Departments.dept_name WHERE empid IN (SELECT empid FROM Schedule WHERE COUNT(*) > 1 GROUP BY date, empid)