Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions HomeWork-Lesson6.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
-- Создать все необходимые внешние ключи. Создать таблицы лайков и постов.

ALTER TABLE profiles
ADD CONSTRAINT profiles_user_id_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE,
ADD CONSTRAINT profiles_photo_id_fk
FOREIGN KEY (photo_id) REFERENCES media(id)
ON DELETE SET NULL;

ALTER TABLE messages
ADD CONSTRAINT messages_from_user_id_fk
FOREIGN KEY (from_user_id) REFERENCES users(id)
ON DELETE CASCADE,
ADD CONSTRAINT messages_to_user_id_fk
FOREIGN KEY (to_user_id) REFERENCES users(id)
ON DELETE CASCADE;

ALTER TABLE friendship
ADD CONSTRAINT friendship_user_id_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE,
ADD CONSTRAINT friendship_friend_id_fk
FOREIGN KEY (friend_id) REFERENCES users(id)
ON DELETE CASCADE,
ADD CONSTRAINT friendship_status_id_fk
FOREIGN KEY (status_id) REFERENCES friendship_statuses(id)
ON DELETE CASCADE;

ALTER TABLE media
ADD CONSTRAINT media_user_id_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE,
ADD CONSTRAINT media_media_type_id_fk
FOREIGN KEY (media_type_id) REFERENCES media_types(id)
ON DELETE CASCADE;

ALTER TABLE communities_users
ADD CONSTRAINT communities_users_community_id_fk
FOREIGN KEY (community_id) REFERENCES communities(id)
ON DELETE CASCADE,
ADD CONSTRAINT communities_users_community_user_id_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE;

ALTER TABLE posts
ADD CONSTRAINT posts_media_id_fk
FOREIGN KEY (media_id) REFERENCES media(id)
ON DELETE CASCADE,
ADD CONSTRAINT posts_community_id_fk
FOREIGN KEY (community_id) REFERENCES communities(id)
ON DELETE CASCADE,
ADD CONSTRAINT posts_user_id_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE;

ALTER TABLE likes
ADD CONSTRAINT likes_target_type_id_fk
FOREIGN KEY (target_type_id) REFERENCES target_types(id)
ON DELETE CASCADE,
ADD CONSTRAINT likes_user_id_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE;









-- Подсчитать общее количество лайков, которые получили 10 самых молодых пользователей.

SELECT * FROM target_types;

SELECT * FROM profiles ORDER BY birthday DESC LIMIT 10;

SELECT
(SELECT COUNT(*) FROM likes WHERE target_id = profiles.user_id AND target_type_id = 2) AS likes_total
FROM profiles
ORDER BY birthday
;

SELECT SUM(likes_total) FROM
(SELECT
(SELECT COUNT(*) FROM likes WHERE target_id = profiles.user_id AND target_type_id = 2) AS likes_total
FROM profiles
ORDER BY birthday
DESC LIMIT 10) AS user_likes
;








-- Определить кто больше поставил лайков (всего) - мужчины или женщины?

SELECT
(SELECT gender FROM profiles WHERE user_id = likes.user_id) AS gender
FROM likes;

SELECT
(SELECT gender FROM profiles WHERE user_id = likes.user_id) AS gender,
COUNT(*) AS total
FROM likes
GROUP BY gender
ORDER BY total DESC
LIMIT 1;





-- Найти 10 пользователей, которые проявляют наименьшую активность в использовании социальной сети.

SELECT
CONCAT(first_name, ' ', last_name) AS user,
(SELECT COUNT(*) FROM likes WHERE likes.user_id = users.id) +
(SELECT COUNT(*) FROM media WHERE media.user_id = users.id) +
(SELECT COUNT(*) FROM messages WHERE messages.from_user_id = users.id) AS overall_activity
FROM users
ORDER BY overall_activity
LIMIT 10;