Skip to content

Commit 63e9597

Browse files
Merge pull request #76 from projetoKhali/dev
sprint 4
2 parents acac59a + edbf536 commit 63e9597

File tree

91 files changed

+1736
-499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+1736
-499
lines changed

db/postgres_drop_all.sql renamed to db/0_postgres_drop_all.sql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
DROP TABLE IF EXISTS Partner CASCADE;
2-
DROP TABLE IF EXISTS "User" CASCADE;
32
DROP TABLE IF EXISTS Users CASCADE;
43
DROP TABLE IF EXISTS Track CASCADE;
54
DROP TABLE IF EXISTS Partner_Track CASCADE;

db/postgres_version.sql renamed to db/1_postgres_version.sql

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,94 +5,94 @@
55
-- Table: Partner
66
CREATE TABLE Partner (
77
pt_id SERIAL UNIQUE,
8-
pt_company_id varchar NOT NULL UNIQUE,
9-
pt_name varchar NOT NULL,
10-
pt_admin_name varchar NOT NULL,
11-
pt_admin_email varchar NOT NULL,
12-
pt_slogan varchar NOT NULL,
13-
pt_country varchar NOT NULL,
14-
pt_city varchar NOT NULL,
15-
pt_address varchar NOT NULL,
16-
pt_compliance boolean NOT NULL,
17-
pt_credit boolean NOT NULL,
18-
pt_status boolean NOT NULL,
8+
pt_company_id varchar NOT NULL UNIQUE,
9+
pt_name varchar NOT NULL,
10+
pt_admin_name varchar NOT NULL,
11+
pt_admin_email varchar NOT NULL,
12+
pt_slogan varchar NOT NULL,
13+
pt_country varchar NOT NULL,
14+
pt_city varchar NOT NULL,
15+
pt_address varchar NOT NULL,
16+
pt_compliance boolean NOT NULL,
17+
pt_credit boolean NOT NULL,
18+
pt_status boolean NOT NULL,
1919
pt_member_type boolean NOT NULL,
20-
pt_insert_date date DEFAULT CURRENT_DATE NOT NULL,
20+
pt_insert_date date DEFAULT NOW() NOT NULL,
2121
CONSTRAINT Partner_pk PRIMARY KEY (pt_id)
2222
) ;
2323

2424
-- Table: Expertise
2525
CREATE TABLE Expertise (
2626
ex_id SERIAL UNIQUE,
27-
ex_name varchar NOT NULL,
28-
tk_id integer NOT NULL
27+
ex_name varchar NOT NULL UNIQUE,
28+
tk_id integer NOT NULL,
29+
CONSTRAINT Expertise_pk PRIMARY KEY (ex_id)
2930
) ;
3031

3132
-- Table: Qualifier
3233
CREATE TABLE Qualifier (
3334
ql_id SERIAL UNIQUE,
34-
ql_name varchar NOT NULL,
35+
ql_name varchar NOT NULL UNIQUE,
3536
CONSTRAINT Qualifier_pk PRIMARY KEY (ql_id)
3637
) ;
3738

3839
-- Table: Expertise_Qualifier
3940
CREATE TABLE Expertise_Qualifier (
4041
ex_ql_id SERIAL UNIQUE,
41-
ex_id integer NOT NULL,
42-
ql_id integer NOT NULL,
42+
ex_id integer NOT NULL,
43+
ql_id integer NOT NULL,
4344
CONSTRAINT ex_ql_unique UNIQUE (ex_id, ql_id),
4445
CONSTRAINT Expertise_Qualifier_pk PRIMARY KEY (ex_ql_id)
4546
) ;
4647

4748
-- Table: Partner_Expertise
4849
CREATE TABLE Partner_Expertise (
4950
pt_ex_id SERIAL UNIQUE,
50-
pt_id integer NOT NULL,
51-
ex_id integer NOT NULL,
51+
pt_id integer NOT NULL,
52+
ex_id integer NOT NULL,
5253
pt_ex_insert_date date DEFAULT CURRENT_DATE NOT NULL,
53-
pt_ex_complete_date date NULL,
54+
pt_ex_complete_date date NULL,
5455
CONSTRAINT pt_ex_unique UNIQUE (pt_id, ex_id),
5556
CONSTRAINT Partner_Expertise_pk PRIMARY KEY (pt_ex_id)
5657
) ;
5758

5859
-- Table: Partner_Qualifier
5960
CREATE TABLE Partner_Qualifier (
6061
pt_ql_id SERIAL UNIQUE,
61-
pt_id integer NOT NULL,
62-
ql_id integer NOT NULL,
62+
pt_id integer NOT NULL,
63+
ql_id integer NOT NULL,
6364
pt_ql_insert_date date DEFAULT CURRENT_DATE NOT NULL,
64-
pt_ql_complete_date date NULL,
65+
pt_ql_complete_date date NULL,
6566
CONSTRAINT pt_ql_unique UNIQUE (pt_id, ql_id),
6667
CONSTRAINT Partner_Qualifier_pk PRIMARY KEY (pt_ql_id)
6768
) ;
6869

6970
-- Table: Partner_Track
7071
CREATE TABLE Partner_Track (
7172
pt_tk_id SERIAL UNIQUE,
72-
pt_id integer NOT NULL,
73-
tk_id integer NOT NULL,
74-
pt_tk_insert_date date DEFAULT now() NOT NULL,
75-
pt_tk_complete_date date NULL,
73+
pt_id integer NOT NULL,
74+
tk_id integer NOT NULL,
75+
pt_tk_insert_date date DEFAULT now() NOT NULL,
76+
pt_tk_complete_date date NULL,
7677
CONSTRAINT pt_tk_unique UNIQUE (pt_id, tk_id),
7778
CONSTRAINT Partner_Track_pk PRIMARY KEY (pt_tk_id)
7879
) ;
7980

8081
-- Table: Track
8182
CREATE TABLE Track (
8283
tk_id SERIAL UNIQUE,
83-
tk_name varchar NOT NULL UNIQUE,
84-
tk_insert_date date NOT NULL,
85-
tk_complete_date date NULL,
84+
tk_name varchar NOT NULL UNIQUE,
85+
tk_insert_date date NOT NULL,
8686
CONSTRAINT Track_pk PRIMARY KEY (tk_id)
8787
) ;
8888

8989
-- Table: User
9090
CREATE TABLE Users (
9191
usr_id SERIAL UNIQUE,
92-
usr_login varchar NOT NULL UNIQUE,
93-
usr_name varchar NOT NULL,
94-
usr_profile_type boolean NOT NULL,
95-
usr_password varchar NOT NULL,
92+
usr_login varchar NOT NULL UNIQUE,
93+
usr_name varchar NOT NULL,
94+
usr_profile_type boolean NOT NULL,
95+
usr_password varchar NOT NULL,
9696
CONSTRAINT User_pk PRIMARY KEY (usr_id)
9797
) ;
9898

db/2_postgres_functions.sql

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
-- retorna quantidade de qualificadores na track
2+
CREATE OR REPLACE FUNCTION qualifier_count(tk INTEGER)
3+
RETURNS INTEGER AS $$
4+
DECLARE
5+
COUNT INTEGER;
6+
BEGIN
7+
SELECT COUNT(QL.QL_ID)
8+
INTO COUNT
9+
FROM Qualifier AS ql
10+
JOIN Expertise_Qualifier AS ex_ql ON ql.ql_id = ex_ql.ql_id
11+
WHERE ex_ql.ex_id IN
12+
(SELECT ex_id
13+
FROM Expertise AS ex
14+
WHERE ex.tk_id = tk);
15+
RETURN COUNT;
16+
END;
17+
$$ LANGUAGE plpgsql;
18+
19+
-- contador de qualificadores completos na track
20+
CREATE OR REPLACE FUNCTION qualifier_completed_count(tk INTEGER)
21+
RETURNS INTEGER AS $$
22+
DECLARE
23+
COUNT INTEGER;
24+
BEGIN
25+
SELECT COUNT (pt_ql.pt_ql_complete_date)
26+
INTO COUNT
27+
FROM Partner_Qualifier AS pt_ql
28+
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
29+
where ex_ql.ex_id IN
30+
(SELECT ex_id
31+
FROM Expertise AS ex
32+
WHERE ex.tk_id = tk);
33+
RETURN COUNT as ql_completed;
34+
END;
35+
$$ LANGUAGE plpgsql;
36+
37+
-- contador de expertises na track
38+
CREATE OR REPLACE FUNCTION expertise_count(tk INTEGER)
39+
RETURNS INTEGER AS $$
40+
DECLARE
41+
COUNT INTEGER;
42+
BEGIN
43+
SELECT COUNT(ex.tk_id)
44+
INTO COUNT
45+
FROM Expertise AS ex
46+
WHERE ex.tk_id = tk;
47+
RETURN COUNT;
48+
END;
49+
$$ LANGUAGE plpgsql;
50+
51+
-- contador de expertises completas na track
52+
CREATE OR REPLACE FUNCTION expertise_completed_count(tk INTEGER)
53+
RETURNS INTEGER AS $$
54+
DECLARE
55+
COUNT INTEGER;
56+
BEGIN
57+
SELECT COUNT (pt_ex.pt_ex_complete_date)
58+
INTO COUNT
59+
FROM Partner_Expertise AS pt_ex
60+
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
61+
WHERE ex.tk_id = tk;
62+
RETURN COUNT as ex_completed;
63+
END;
64+
$$ LANGUAGE plpgsql;
65+
66+
-- média de tempo de conclusão dos qualificadores
67+
CREATE OR REPLACE FUNCTION avg_expertise_completion_time(tk INTEGER)
68+
RETURNS INTEGER AS $$
69+
DECLARE
70+
AVG_TIME INTEGER;
71+
BEGIN
72+
SELECT AVG((pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date))
73+
INTO AVG_TIME
74+
FROM Partner_Expertise AS pt_ex
75+
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
76+
WHERE ex.tk_id = tk;
77+
RETURN AVG_TIME;
78+
END;
79+
$$ LANGUAGE plpgsql;

db/3_postgres_views.sql

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
CREATE OR REPLACE VIEW track_metrics
2+
AS select
3+
tk.tk_id,
4+
tk.tk_name,
5+
(expertise_count(tk.tk_id)) AS expertise_count,
6+
7+
(SELECT qualifier_count(tk.tk_id)) AS qualifier_count,
8+
9+
(SELECT COUNT(pt.pt_id)
10+
FROM Partner_Track AS pt
11+
WHERE pt.tk_id = tk.tk_id
12+
) AS partner_count,
13+
14+
-- tempo médio para completar uma expertise
15+
(
16+
SELECT ROUND(AVG((pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date)::numeric), 2)
17+
FROM Partner_Expertise AS pt_ex
18+
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
19+
WHERE ex.tk_id = tk.tk_id
20+
) AS avg_expertise_completion_time,
21+
22+
(
23+
SELECT ROUND(AVG((pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date)::numeric), 2)
24+
FROM Partner_Qualifier AS pt_ql
25+
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
26+
WHERE ex_ql.ex_id IN (
27+
SELECT ex_id
28+
FROM Expertise ex
29+
WHERE ex.tk_id = tk.tk_id
30+
)
31+
) AS avg_qualifier_completion_time,
32+
33+
-- porcentagem de qualificadores completados na track
34+
(
35+
ROUND(
36+
((qualifier_completed_count(tk.tk_id) * 100) /
37+
-- se o divisor for 0, retorna NULL
38+
NULLIF (qualifier_count(tk.tk_id), 0))::numeric
39+
, 2)
40+
)AS avg_qualifier_completion_percentage,
41+
42+
-- porcentagem de expertise completadas na track
43+
(
44+
ROUND(
45+
((expertise_completed_count(tk.tk_id) * 100) /
46+
NULLIF (expertise_count(tk.tk_id), 0))::numeric
47+
, 2)
48+
) AS avg_expertise_completion_percentage,
49+
50+
-- porcentagem de abandono (validade de um ano)
51+
(
52+
ROUND(
53+
(((select count(pt_ql.*)
54+
from Partner_Qualifier pt_ql
55+
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
56+
WHERE pt_ql.pt_ql_complete_date is not NULL
57+
AND pt_ql.pt_ql_complete_date + interval '1 year' < now()
58+
AND ex_ql.ex_id IN (
59+
SELECT ex_id
60+
FROM Expertise ex
61+
WHERE ex.tk_id = tk.tk_id))
62+
* 100)
63+
64+
/
65+
66+
NULLIF (qualifier_count(tk.tk_id), 0))::numeric
67+
, 2)
68+
)AS avg_expired_qualifiers,
69+
70+
-- porcentagem da conlusão da track
71+
(
72+
-- porcentagem de conclusão dos qualificadores
73+
(
74+
(qualifier_completed_count(tk.tk_id) * 100) /
75+
NULLIF (qualifier_count(tk.tk_id), 0)
76+
77+
+
78+
-- porcentagem de conclusão dos qualificadores
79+
(expertise_completed_count(tk.tk_id) * 100) /
80+
NULLIF (expertise_count(tk.tk_id), 0)
81+
)
82+
/ 2
83+
) AS track_completion_percentage,
84+
85+
-- tempo médio de conclusão da track
86+
-- média de tempo de conclusão das expertises + média de tempo de conclusão dos qualificadores / numero de qualificadores e expertises finalizados
87+
(
88+
SELECT COALESCE(
89+
ROUND(
90+
(
91+
(
92+
SELECT AVG(pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date)
93+
FROM Partner_Expertise AS pt_ex
94+
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
95+
WHERE ex.tk_id = tk.tk_id
96+
) +
97+
(
98+
SELECT AVG(pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date)
99+
FROM Partner_Qualifier AS pt_ql
100+
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
101+
WHERE ex_ql.ex_id IN (
102+
SELECT ex_id
103+
FROM Expertise ex
104+
WHERE ex.tk_id = tk.tk_id
105+
)
106+
)
107+
) / NULLIF ((expertise_completed_count(tk.tk_id) + qualifier_completed_count(tk.tk_id)), 0)
108+
::numeric, 2),
109+
(
110+
ROUND(
111+
(SELECT AVG(pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date)
112+
FROM Partner_Qualifier AS pt_ql
113+
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
114+
WHERE ex_ql.ex_id IN (
115+
SELECT ex_id
116+
FROM Expertise ex
117+
WHERE ex.tk_id = tk.tk_id))
118+
::numeric, 2)
119+
)
120+
) AS avg_track_completion_time
121+
)
122+
123+
FROM
124+
Track AS tk;
125+
126+
--PARTNER METRICS============================================================================
127+
CREATE OR REPLACE VIEW partner_metrics AS
128+
SELECT prt.pt_id,prt.pt_name,prt.pt_city,
129+
COUNT(DISTINCT pac.tk_id) as tracks,
130+
(SELECT aa.pt_tk_complete_date FROM partner_track aa
131+
WHERE aa.pt_id = prt.pt_id
132+
AND aa.pt_tk_complete_date IS NOT NULL) completed_tracks,
133+
COUNT(DISTINCT pqu.ql_id) qualifiers,
134+
(SELECT COUNT( aa.ql_id) FROM partner_qualifier aa
135+
WHERE aa.pt_id = prt.pt_id
136+
AND aa.pt_ql_complete_date IS NOT NULL) completed_qualifiers,
137+
COUNT(DISTINCT xpe.ex_id) expertises,
138+
(SELECT COUNT(aa.ex_id) FROM partner_expertise aa
139+
WHERE aa.pt_id = prt.pt_id
140+
AND aa.pt_ex_complete_date IS NOT NULL) completed_expertises
141+
142+
FROM partner prt
143+
INNER JOIN partner_track pac
144+
ON pac.pt_id = prt.pt_id
145+
INNER JOIN partner_qualifier pqu
146+
ON pqu.pt_id = pac.pt_id
147+
INNER JOIN partner_expertise xpe
148+
ON xpe.pt_id = prt.pt_id
149+
GROUP BY prt.pt_id,prt.pt_name,prt.pt_city
150+
ORDER BY prt.pt_id;
151+
152+
--PARTNER REPORT
153+
154+
CREATE OR REPLACE VIEW partner_reports AS
155+
SELECT row_number() OVER (ORDER BY pt.pt_id) AS id,
156+
pt.pt_id,pt.pt_name,tr.tk_name,
157+
pt_tr.pt_tk_insert_date as tk_start_date,
158+
pt_tr.pt_tk_complete_date as tk_end_date,
159+
ex.ex_name,
160+
pt_ex.pt_ex_insert_date as ex_start_date,
161+
pt_ex.pt_ex_complete_date as ex_end_date,
162+
ql.ql_name,
163+
pt_ql.pt_ql_insert_date as ql_start_date,
164+
pt_ql.pt_ql_complete_date as ql_end_date,
165+
pt_ql.pt_ql_insert_date + INTERVAL '2 years' as ql_due_date
166+
FROM partner pt
167+
LEFT JOIN partner_track pt_tr
168+
ON pt_tr.pt_id = pt.pt_id
169+
LEFT JOIN track tr
170+
ON tr.tk_id = pt_tr.tk_id
171+
LEFT JOIN partner_expertise pt_ex
172+
ON pt_ex.pt_id = pt_tr.pt_id
173+
LEFT JOIN expertise ex
174+
ON ex.ex_id = pt_ex.ex_id
175+
LEFT JOIN partner_qualifier pt_ql
176+
ON pt_ql.pt_id = pt_tr.pt_id
177+
LEFT JOIN qualifier ql
178+
ON ql.ql_id = pt_ql.ql_id
179+
ORDER BY pt.pt_id;

0 commit comments

Comments
 (0)