-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreviewersmovies.sql
146 lines (146 loc) · 3.58 KB
/
reviewersmovies.sql
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
CREATE TABLE reviewers (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(100),
last_name VARCHAR(100)
);
CREATE TABLE series (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
released_year YEAR(4),
genre VARCHAR(100)
);
CREATE TABLE reviews (
id INT PRIMARY KEY AUTO_INCREMENT,
rating DECIMAL(2 , 1 ),
series_id INT,
reviewer_id INT,
FOREIGN KEY (series_id)
REFERENCES series (id),
FOREIGN KEY (reviewer_id)
REFERENCES reviewers (id)
);
INSERT INTO series (title, released_year, genre) VALUES
('Archer', 2009, 'Animation'),
('Arrested Development', 2003, 'Comedy'),
("Bob's Burgers", 2011, 'Animation'),
('Bojack Horseman', 2014, 'Animation'),
("Breaking Bad", 2008, 'Drama'),
('Curb Your Enthusiasm', 2000, 'Comedy'),
("Fargo", 2014, 'Drama'),
('Freaks and Geeks', 1999, 'Comedy'),
('General Hospital', 1963, 'Drama'),
('Halt and Catch Fire', 2014, 'Drama'),
('Malcolm In The Middle', 2000, 'Comedy'),
('Pushing Daisies', 2007, 'Comedy'),
('Seinfeld', 1989, 'Comedy'),
('Stranger Things', 2016, 'Drama');
INSERT INTO reviewers (first_name, last_name) VALUES
('Thomas', 'Stoneman'),
('Wyatt', 'Skaggs'),
('Kimbra', 'Masters'),
('Domingo', 'Cortes'),
('Colt', 'Steele'),
('Pinkie', 'Petit'),
('Marlon', 'Crafford');
INSERT INTO reviews(series_id, reviewer_id, rating) VALUES
(1,1,8.0),(1,2,7.5),(1,3,8.5),(1,4,7.7),(1,5,8.9),
(2,1,8.1),(2,4,6.0),(2,3,8.0),(2,6,8.4),(2,5,9.9),
(3,1,7.0),(3,6,7.5),(3,4,8.0),(3,3,7.1),(3,5,8.0),
(4,1,7.5),(4,3,7.8),(4,4,8.3),(4,2,7.6),(4,5,8.5),
(5,1,9.5),(5,3,9.0),(5,4,9.1),(5,2,9.3),(5,5,9.9),
(6,2,6.5),(6,3,7.8),(6,4,8.8),(6,2,8.4),(6,5,9.1),
(7,2,9.1),(7,5,9.7),
(8,4,8.5),(8,2,7.8),(8,6,8.8),(8,5,9.3),
(9,2,5.5),(9,3,6.8),(9,4,5.8),(9,6,4.3),(9,5,4.5),
(10,5,9.9),
(13,3,8.0),(13,4,7.2),
(14,2,8.5),(14,3,8.9),(14,4,8.9);
SELECT
*
FROM
series;
SELECT
*
FROM
reviewers;
SELECT
*
FROM
reviews;
SELECT
title, rating
FROM
series s
JOIN
reviews r ON s.id = r.series_id;
SELECT
title, AVG(rating) AS avg_rating
FROM
series s
JOIN
reviews r ON s.id = r.series_id
GROUP BY s.id
ORDER BY avg_rating;
SELECT
rr.first_name, rr.last_name, r.rating
FROM
reviewers rr
JOIN
reviews r ON rr.id = r.reviewer_id;
SELECT
title AS unreviewed_series
FROM
series s
LEFT JOIN
reviews r ON s.id = r.series_id
WHERE
rating IS NULL;
SELECT
genre, ROUND(AVG(rating), 2) AS avg_rating
FROM
series s
JOIN
reviews r ON r.series_id = s.id
GROUP BY genre;
SELECT
rr.first_name,
rr.last_name,
COUNT(rating) AS COUNT,
IFNULL(MIN(rating), 0) AS MIN,
IFNULL(MAX(rating), 0) AS MAX,
IFNULL(AVG(rating), 0) AS AVG,
CASE
WHEN COUNT(rating) > 0 THEN 'ACTIVE'
ELSE 'INACTIVE'
END AS STATUS
FROM
reviewers rr
LEFT JOIN
reviews r ON r.reviewer_id = rr.id
GROUP BY rr.id;
SELECT
rr.first_name,
rr.last_name,
COUNT(rating) AS COUNT,
IFNULL(MIN(rating), 0) AS MIN,
IFNULL(MAX(rating), 0) AS MAX,
ROUND(IFNULL(AVG(rating), 0), 2) AS AVG,
IF(COUNT(rating) > 0,
'ACTIVE',
'INACTIVE') AS STATUS
FROM
reviewers rr
LEFT JOIN
reviews r ON r.reviewer_id = rr.id
GROUP BY rr.id;
SELECT
title,
rating,
CONCAT(first_name, ' ', last_name) AS reviewer
FROM
series s
JOIN
reviews r ON s.id = r.series_id
JOIN
reviewers rr ON rr.id = r.reviewer_id
ORDER BY r.series_id;