drop table hr
ORA-00942: table or view does not existMore Details: https://docs.oracle.com/error-help/db/ora-00942
drop table REQUIRED_AUDITS
ORA-00942: table or view does not existMore Details: https://docs.oracle.com/error-help/db/ora-00942
drop table SCORE_ENTRY
ORA-00942: table or view does not existMore Details: https://docs.oracle.com/error-help/db/ora-00942
create table hr (
id number, manager_email varchar2(30), VP varchar2(30)
)
Table created.
create table REQUIRED_AUDITS (
id number, manager_email varchar2(30), employee_email varchar2(30), audits_required number, audit_eligible varchar2(1)
)
Table created.
create table SCORE_ENTRY (
id number, manager_email varchar2(30), employee_email varchar2(30), score number
)
Table created.
insert into hr values ( 1 ,'john@com.com','jake@com.com')
1 row(s) inserted.
insert into hr values ( 2 ,'smith@com.com','kathleen@com.com')
1 row(s) inserted.
insert into hr values ( 3 ,'maria@com.com','james@com.com')
1 row(s) inserted.
insert into hr values ( 4 ,'linda@com.com','david@com.com')
1 row(s) inserted.
insert into hr values ( 5 ,'jess@com.com','kim@com.com')
1 row(s) inserted.
insert into REQUIRED_AUDITS values ( 1 ,'john@com.com','brad@com.com', 5 ,'Y' )
1 row(s) inserted.
insert into REQUIRED_AUDITS values ( 2 ,'linda@com.com','gloria@com.com', 2,'Y' )
1 row(s) inserted.
insert into REQUIRED_AUDITS values ( 3 ,'linda@com.com','susan@com.com', 7,'Y' )
1 row(s) inserted.
insert into REQUIRED_AUDITS values ( 4 ,'john@com.com','carmen@com.com', 5,'Y' )
1 row(s) inserted.
insert into REQUIRED_AUDITS values ( 5 ,'linda@com.com','aaron@com.com', 25,'N' )
1 row(s) inserted.
insert into SCORE_ENTRY values ( 1 ,'linda@com.com','gloria@com.com', 85.04 )
1 row(s) inserted.
insert into SCORE_ENTRY values ( 2 ,'linda@com.com','susan@com.com', 100 )
1 row(s) inserted.
insert into SCORE_ENTRY values ( 3 ,'john@com.com','carmen@com.com', 80.50 )
1 row(s) inserted.
select hr.manager_email
, sum(ra.audits_required) as tot_audits_required
, count(se.score) as audits_performed
, (count(se.score) / sum(ra.audits_required)) * 100 as pct_complete
from hr
left outer join ( select * from REQUIRED_AUDITS where audit_eligible = 'Y') ra on ra.manager_email = hr.manager_email
left outer join SCORE_ENTRY se on se.employee_email = ra.employee_email
group by hr.manager_email
order by hr.manager_email
| MANAGER_EMAIL | TOT_AUDITS_REQUIRED | AUDITS_PERFORMED | PCT_COMPLETE | jess@com.com | - | 0 | - | john@com.com | 10 | 1 | 10 | linda@com.com | 9 | 2 | 22.22222222222222222222222222222222222222 | maria@com.com | - | 0 | - | smith@com.com | - | 0 | - |
|---|
Add a rogue SCORE_ENTRY record
insert into SCORE_ENTRY values ( 4 ,'linda@com.com','aaron@com.com', 80.50 )
1 row(s) inserted.
re-run the query
select hr.manager_email
, sum(ra.audits_required) as tot_audits_required
, count(se.score) as audits_performed
, (count(se.score) / sum(ra.audits_required)) * 100 as pct_complete
from hr
left outer join ( select * from REQUIRED_AUDITS where audit_eligible = 'Y') ra on ra.manager_email = hr.manager_email
left outer join SCORE_ENTRY se on se.employee_email = ra.employee_email
group by hr.manager_email
order by hr.manager_email
| MANAGER_EMAIL | TOT_AUDITS_REQUIRED | AUDITS_PERFORMED | PCT_COMPLETE | jess@com.com | - | 0 | - | john@com.com | 10 | 1 | 10 | linda@com.com | 9 | 2 | 22.22222222222222222222222222222222222222 | maria@com.com | - | 0 | - | smith@com.com | - | 0 | - |
|---|
select
RA.manager_email,
sum(RA.audits_required) as ReqQty,
(select count(manager_email) from SCORE_ENTRY SE where SE.manager_email = RA.manager_email) as Compleated
from REQUIRED_AUDITS RA
where audit_eligible='Y'
group by manager_email
insert into SCORE_ENTRY values ( 12 ,'linda@com.com','susan@com.com', 100 )
insert into SCORE_ENTRY values ( 11 ,'linda@com.com','gloria@com.com', 85.04 )
select hr.manager_email
, sum(ra.audits_required) as tot_audits_required
, count(se.score) as audits_performed
, (count(se.score) / sum(ra.audits_required)) * 100 as pct_complete
from hr
left outer join ( select * from REQUIRED_AUDITS where audit_eligible = 'Y') ra on ra.manager_email = hr.manager_email
left outer join SCORE_ENTRY se on se.employee_email = ra.employee_email
group by hr.manager_email
order by hr.manager_email
WITH aud(manager_email,Total_audits) AS
(SELECT manager_email,
SUM (
CASE
WHEN audit_eligible = 'Y'
THEN audits_required
END )
FROM REQUIRED_AUDITS
GROUP BY manager_email
), --Total_audits
scores(manager_email,Audits_Performed) AS
(SELECT manager_email,
COUNT ( ID )
FROM SCORE_ENTRY s
GROUP BY manager_email
) --Audits_Performed
SELECT h.manager_email manager,
a.Total_audits,
s.Audits_Performed,
100 * s.Audits_Performed / a.Total_audits percentage_complete
FROM HR h
LEFT OUTER JOIN aud a
ON h.manager_email = a.manager_email
LEFT OUTER JOIN scores s
ON h.manager_email = s.manager_email
ORDER BY 2 DESC NULLS LAST