Well, here's the database structure I've created for a quiz.
DROP TABLE "E20079852" cascade constraints;
DROP TABLE "E20079852_DEPARTMENT" cascade constraints;
DROP TABLE "E20079852_MANAGEMENT" cascade constraints;
DROP TABLE "E20079852_PROJ" cascade constraints;
DROP TABLE "E20079852_ASSIGNMENTS" cascade constraints;
CREATE TABLE E20079852
(
EID NUMBER(4) NOT NULL
, EFNAME VARCHAR2(20) NOT NULL
, ELNAME VARCHAR2(20) NOT NULL
, EDOB DATE NOT NULL
, EDOJ DATE NOT NULL
, EDOR DATE NOT NULL
, DID NUMBER(4) NOT NULL
, CONSTRAINT E20079852_PK PRIMARY KEY
(
EID
)
ENABLE
);
CREATE TABLE E20079852_DEPARTMENT
(
DID NUMBER(4) NOT NULL
, DNAME VARCHAR2(20) NOT NULL
, DTOTEMPCOUNT NUMBER(4) NOT NULL
, CONSTRAINT TABLE1_PK PRIMARY KEY
(
DID
)
ENABLE
);
CREATE TABLE E20079852_MANAGEMENT
(
EID NUMBER(4) NOT NULL
, EMNGRID NUMBER(4) NOT NULL
, CONSTRAINT E20079852_MANAGEMENT_PK PRIMARY KEY
(
EID
)
ENABLE
);
CREATE TABLE E20079852_PROJ
(
PID NUMBER(4) NOT NULL
, PROJNAME VARCHAR2(20) NOT NULL
, DID NUMBER(4) NOT NULL
, PROJCOST NUMBER(20) NOT NULL
, CONSTRAINT E20079852_PROJ_PK PRIMARY KEY
(
PID
)
ENABLE
);
CREATE TABLE E20079852_ASSIGNMENTS
(
PID NUMBER(4) NOT NULL
, EIDS VARCHAR2(20) NOT NULL
, ESTMTCOST NUMBER(20) NOT NULL
, ACTUAL NUMBER(20) NOT NULL
, CONSTRAINT E20079852_ASSIGNMENTS_PK PRIMARY KEY
(
PID
)
);
-- INSERTing data:
Insert into E20079852 values(1,'Jacalyn','Agarwal',TO_DATE('08/09/2007','dd-MM-YYYY'),TO_DATE('06/08/2037','dd-MM-YYYY'),TO_DATE('08/09/2067','dd-MM-YYYY'),2);
Insert into E20079852 values(2 ,'Jace','Khatri',TO_DATE('02/06/2019','dd-MM-YYYY'),TO_DATE('02/06/2039','dd-MM-YYYY'),TO_DATE('02/06/2069','dd-MM-YYYY'),1);
Insert into E20079852 values(3 ,'Jacey','Ahuja',TO_DATE('24/09/2024','dd-MM-YYYY'),TO_DATE('24/09/2044','dd-MM-YYYY'),TO_DATE('23/09/2074','dd-MM-YYYY'),4);
Insert into E20079852 values(4 ,'Jack','Anand',TO_DATE('08/12/2025','dd-MM-YYYY'),TO_DATE('08/01/2045','dd-MM-YYYY'),TO_DATE('08/12/2075','dd-MM-YYYY'),3);
Insert into E20079852 values(5 ,'swami','Laghari',TO_DATE('27/10/2035','dd-MM-YYYY'),TO_DATE('27/01/2065','dd-MM-YYYY'),TO_DATE('27/10/2065','dd-MM-YYYY'),2);
Insert into E20079852 values(6 ,'Jackie','Patel',TO_DATE('08/07/2071','dd-MM-YYYY'),TO_DATE('08/03/2091','dd-MM-YYYY'),TO_DATE('08/07/2099','dd-MM-YYYY'),1);
Insert into E20079852 values(7 ,'Jackson','Reddy',TO_DATE('27/07/2021','dd-MM-YYYY'),TO_DATE('27/04/2031','dd-MM-YYYY'),TO_DATE('27/07/2061','dd-MM-YYYY'),4);
Insert into E20079852 values(8 ,'Jaclyn','Swami',TO_DATE('22/11/2021','dd-MM-YYYY'),TO_DATE('22/12/2041','dd-MM-YYYY'),TO_DATE('22/11/2071','dd-MM-YYYY'),4);
Insert into E20079852 values(9 ,'Jacob','Rangaswami',TO_DATE('07/12/2022','dd-MM-YYYY'),TO_DATE('07/10/2066','dd-MM-YYYY'),TO_DATE('07/12/2096','dd-MM-YYYY'),3);
Insert into E20079852 values(10 ,'Jacque','Nagaswami',TO_DATE('28/07/2025','dd-MM-YYYY'),TO_DATE('28/06/2035','dd-MM-YYYY'),TO_DATE('28/07/2065','dd-MM-YYYY'),2);
Insert into E20079852 values(11 ,'Jacques','Ramaswami',TO_DATE('02/10/2034','dd-MM-YYYY'),TO_DATE('02/08/2054','dd-MM-YYYY'),TO_DATE('02/10/2084','dd-MM-YYYY'),3);
Insert into E20079852 values(12 ,'Jada','Balaswami',TO_DATE('08/10/2071','dd-MM-YYYY'),TO_DATE('08/02/2081','dd-MM-YYYY'),TO_DATE('08/10/2091','dd-MM-YYYY'),2);
Insert into E20079852 values(13 ,'Jody','Balakrishna',TO_DATE('08/03/2072','dd-MM-YYYY'),TO_DATE('08/08/2087','dd-MM-YYYY'),TO_DATE('08/03/2097','dd-MM-YYYY'),1);
Insert into E20079852_DEPARTMENT values(1,'Slogging',3);
Insert into E20079852_DEPARTMENT values(2,'Boring',4);
Insert into E20079852_DEPARTMENT values(3,'Scoring',3);
Insert into E20079852_DEPARTMENT values(4,'Exploring',3);
Insert into E20079852_MANAGEMENT values(1,1);
Insert into E20079852_MANAGEMENT values(2,4);
Insert into E20079852_MANAGEMENT values(3,8);
Insert into E20079852_MANAGEMENT values(4,8);
Insert into E20079852_MANAGEMENT values(5,6);
Insert into E20079852_MANAGEMENT values(6,7);
Insert into E20079852_MANAGEMENT values(7,7);
Insert into E20079852_MANAGEMENT values(8,6);
Insert into E20079852_MANAGEMENT values(9,8);
Insert into E20079852_MANAGEMENT values(10,11);
Insert into E20079852_MANAGEMENT values(11,3);
Insert into E20079852_MANAGEMENT values(12,9);
Insert into E20079852_MANAGEMENT values(13,10);
Insert into E20079852_PROJ values(1,'A',2,8107948);
Insert into E20079852_PROJ values(2,'B',1,16076753);
Insert into E20079852_PROJ values(3,'C',2,3201912);
Insert into E20079852_PROJ values(4,'D',3,8999724);
Insert into E20079852_PROJ values(5,'E',2,16720391);
Insert into E20079852_PROJ values(6,'F',3,3564970);
Insert into E20079852_PROJ values(7,'G',2,18714509);
Insert into E20079852_PROJ values(8,'H',4,12458138);
Insert into E20079852_ASSIGNMENTS values(1,'8',5482978,2142205);
Insert into E20079852_ASSIGNMENTS values(2,'7,9',16847801,13506375);
Insert into E20079852_ASSIGNMENTS values(3,'6',12370094,8939168);
Insert into E20079852_ASSIGNMENTS values(4,'5,10',1161815,5302872);
Insert into E20079852_ASSIGNMENTS values(5,'4',16137139,18486736);
Insert into E20079852_ASSIGNMENTS values(6,'3,11',5244118,6315452);
Insert into E20079852_ASSIGNMENTS values(7,'2,12,13',18336797,10989185);
Insert into E20079852_ASSIGNMENTS values(8,'1',17989109,2950031);
alter table "E20079852" add constraint Department_DID_FK foreign key("DID") references "E20079852_DEPARTMENT"("DID");
alter table "E20079852" add constraint Management_EID_FK foreign key("EID") references "E20079852_MANAGEMENT"("EID");
alter table "E20079852_PROJ" add constraint Assignments_PID_FK foreign key("PID") references "E20079852_ASSIGNMENTS"("PID");
Question
I'm able to handle setting up easy and intermediate questions by myself, but I am not able to figure out what would be the best way to frame the DML operations to answer these two questions.
- How to prove there's nobody working on multiple projects, though multiple people are working on the same project?
- Who is the top most manager in each of the departments that have spent less than 80% of their estimation?
The meaning carried by the columns under consideration
Here are some ideas about the columns and the meaning they carry:
- EID: Employee ID
- DID: Department ID
- PID: Project ID
- DTOTEMPCOUNT: Total number of employee in a department
- ESTMTCOST: Estimated cost of project by the employee in charge
- ACTUAL: Actual expense fr the project till date
- PROJCOST: Overall project cost allowed by organisation
- EMNGRID: Manager's ID for the respective employee
DOR: Date of Retirement(Estimated)
The
Assignments
tableEID
column have retained multipleEID
values as a VARCHAR/STRING.
Current considerations
I'm clueless about obtaining an answer for the first question so couldn't handle it at all, but regarding the second one I have figured out how to get the projects that have spent less than 80% of their estimation with the following SELECT operation:
SELECT unique(D.DNAME)
FROM Assignments A, PROJ P, DEPARTMENT D
WHERE A.PID = P.PID
AND P.DID = D.DID
AND A.ACTUAL < (A.ESTMTCOST*0.8);
I would highly appreciate your help.
unique
is not a function. It is always applied to all columns in the select list. Writingunique(d.dname)
is exactly the same thing asunique d.dname
(or the more commondistinct d.dname
)