-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathanalytical.sql
More file actions
56 lines (42 loc) · 1.44 KB
/
analytical.sql
File metadata and controls
56 lines (42 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
DROP FUNCTION IF EXISTS countryRankings();
CREATE OR REPLACE FUNCTION countryRankings()
RETURNS TABLE (
country_code CHAR(3),
country_name VARCHAR(30),
count bigint
) AS $$
BEGIN
DROP VIEW IF EXISTS olympics.COUNTRYOLYMPIADS;
CREATE VIEW olympics.COUNTRYOLYMPIADS AS (
SELECT country_code, country_name
FROM olympics.OLYMPIAD
LEFT JOIN olympics.COUNTRY
ON olympics.OLYMPIAD.country = olympics.COUNTRY.country_code
);
RETURN QUERY
SELECT countryolympiads.country_code, countryolympiads.country_name, count(countryolympiads.country_code)
FROM olympics.COUNTRYOLYMPIADS
GROUP BY countryolympiads.country_code, countryolympiads.country_name
ORDER BY count(COUNTRYOLYMPIADS.country_code) DESC;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION topSports(x INT, k INT)
RETURNS TABLE(
sport_id INT,
sport_name VARCHAR(30),
teamCount bigint
) AS $$
DECLARE
startdate timestamp;
BEGIN
IF k <= 0 THEN k := 0; END IF;
startdate := CURRENT_DATE - (x || ' months')::interval;
RETURN QUERY
SELECT olympics.sport.sport_id, olympics.sport.sport_name, count(olympics.team.sport)
FROM olympics.sport LEFT JOIN olympics.team
ON olympics.sport.sport_id = olympics.team.sport AND olympics.sport.date_added >= startdate
GROUP BY olympics.sport.sport_id, olympics.sport.sport_name
ORDER BY count(olympics.team.sport) DESC
LIMIT k;
END;
$$ LANGUAGE plpgsql;