diff --git a/HomeWork-Lesson6.sql b/HomeWork-Lesson6.sql new file mode 100644 index 0000000..2d9b74e --- /dev/null +++ b/HomeWork-Lesson6.sql @@ -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; \ No newline at end of file