-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinsta_exercice.sql
More file actions
156 lines (122 loc) · 3.9 KB
/
insta_exercice.sql
File metadata and controls
156 lines (122 loc) · 3.9 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
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
147
148
149
150
151
152
153
154
155
156
/*
This database simulates some of the basic instagram functionalities
CREATE TABLE users (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(190) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE photos (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
image_url VARCHAR(255) NOT NULL,
user_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY(user_id) REFERENCES users(id)
);
CREATE TABLE comments (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
comment_text VARCHAR(255) NOT NULL,
photo_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY(photo_id) REFERENCES photos(id),
FOREIGN KEY(user_id) REFERENCES users(id)
);
CREATE TABLE likes (
user_id INTEGER NOT NULL,
photo_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY(user_id) REFERENCES users(id),
FOREIGN KEY(photo_id) REFERENCES photos(id),
PRIMARY KEY(user_id, photo_id)
);
CREATE TABLE follows (
follower_id INTEGER NOT NULL,
followee_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
FOREIGN KEY(follower_id) REFERENCES users(id),
FOREIGN KEY(followee_id) REFERENCES users(id),
PRIMARY KEY(follower_id, followee_id)
);
CREATE TABLE tags (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
tag_name VARCHAR(190) UNIQUE,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE photo_tags (
photo_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
FOREIGN KEY(photo_id) REFERENCES photos(id),
FOREIGN KEY(tag_id) REFERENCES tags(id),
PRIMARY KEY(photo_id, tag_id)
);
*/
-----------------------------------------------------------------------
-- 1. Find the 5 oldest users.
SELECT
username,
created_at
FROM users
ORDER BY created_at
LIMIT 5;
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-- 2. What day of the week do most users register on?
SELECT
DATE_FORMAT(created_at, '%W') AS "Day",
COUNT(DATE_FORMAT(created_at, '%W')) AS "Registers"
FROM users
GROUP BY DATE_FORMAT(created_at, '%W')
ORDER BY COUNT(DATE_FORMAT(created_at, '%W')) DESC
LIMIT 1;
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-- 3. Find the users who have never posted a photo.
SELECT
username
FROM users
LEFT JOIN photos
ON users.id = photos.user_id
WHERE photos.id IS NULL;
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-- 4. Which user posted the photo with the most likes?
SELECT
username,
image_url,
COUNT(likes.photo_id) AS number_of_likes
FROM photos
INNER JOIN users
ON users.id = photos.user_id
INNER JOIN likes
ON photos.id = likes.photo_id
GROUP BY photos.id
ORDER BY number_of_likes DESC
LIMIT 1;
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-- 5. What is the average number of user posts?
SELECT
(SELECT COUNT(*) FROM photos) / (SELECT COUNT(*) FROM users) AS avg;
-----------------------------------------------------------------------
-----------------------------------------------------------------------
-- 6. What are the 5 most commonly used hashtags?
SELECT
tag_name,
COUNT(tag_name)
FROM tags
INNER JOIN photo_tags
ON photo_tags.tag_id = tags.id
GROUP BY tags.id
ORDER BY COUNT(tag_name) DESC
LIMIT 5;
-----------------------------------------------------------------------
-----------------------------------------------------------------------
--7. Find the users who have liked every single photo on the website
SELECT username,
COUNT(likes.photo_id) AS photos_liked
FROM users
INNER JOIN likes
ON users.id = likes.user_id
GROUP BY users.id
HAVING photos_liked = (SELECT COUNT(id) FROM photos)
;