Софтуерно Инженерство
Loading...
+ Нов въпрос
DMinchev91 avatar DMinchev91 4 Точки

REEXAM PREP QUESTION - DOUBLE COUNT

Понеже поправката на курса MYSQL наближава и съм се захванал да решавам старите изпити, имам един въпрос по задачка от изпита през СЕПТЕМВРИ 2017

ЗАДАЧАТА Е 11-ta MOST POPULAR USER

Extract from the database, the most popular user – the 1st in terms of count of followers.

Required Columns

  • id (users)
  • username
  • posts (count of posts)
  • followers (count of followers ) 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SELECT  u.id, u.username, COUNT(p.user_id) AS post, COUNT(uf.follower_id) AS followers

FROM users AS u

RIGHT JOIN users_followers AS uf ON uf.user_id=u.id

RIGHT JOIN posts AS p ON p.user_id=u.id

GROUP BY u.id

ORDER BY followers DESC LIMIT 1 ;

ТОВА Е МОЕТО РЕШЕНИЕ - имам проблем при групирането и затова COUNT(post.id) не излиза правилно. Ще се радвам ако някой даде едно рамо :)

Тагове:
0
Databases Basics - MySQL
TeodorStefanovPld avatar TeodorStefanovPld 1225 Точки

гледам както си го написал но малко ми е трудно да се ориентирам без самата база.До колкото разбирам имаш 3 отделни таблици в едната са ти users в другата са posts като ключа ти е user_id? като fk. и followers са ти 3та таблица който са пак с user_id като fk? 

и правиш 2 join-a който доколкото виждам са inner. И получаваш таблица в която имаш:

id, username,posts,followers нали така? групираш по u.id и така получаваш уникалните users с техните posts и followers

да нямаш постове без user_id?и те да ти бъркат count-a? опита ли с having след group by или да сложиш и Max() функцията като условие  примерно Having(Max(count(p.u.id) AND Max(uf.followers_id)) И другото е може би има user с много последователи но без posts? sorry но реално без базата данни или примерен отрязък от нея това са само предположения.

0
DMinchev91 avatar DMinchev91 4 Точки

Да предположенията са ти точни.

Има 3 таблици - users, posts , users_followers като последната е mapping tabele (users_id , followers_id ) са свързани към users.id със fk. Posts също има сръзка с users по fk

Няма постове без user_id такаче това не би трябвало да е проблем. НО групировката не се получава... пробвах това с МAX(COUNT(...)) и преди, но не тръгва. Казва че е неправлно използване на функции.

 

ИНАЧЕ това е базата. ДАТА-та е в джъдж - изпит СЕпетември 2017

 

CREATE DATABASE instagraph_db;

 

USE instagraph_db;

 

CREATE TABLE pictures (

id INT(11) PRIMARY KEY AUTO_INCREMENT,

path VARCHAR(255) NOT NULL,

size DECIMAL(10,2) NOT NULL

);

 

CREATE TABLE users (

id INT(11) PRIMARY KEY AUTO_INCREMENT,

username VARCHAR(30) UNIQUE,

password VARCHAR(30) NOT NULL,

profile_picture_id INT(11),

CONSTRAINT fk_users_picktures

FOREIGN KEY (profile_picture_id) REFERENCES pictures(id)

);

 

CREATE TABLE posts (

id INT(11) PRIMARY KEY AUTO_INCREMENT,

caption VARCHAR(255) NOT NULL,

user_id INT(11) NOT NULL,

picture_id INT(11) NOT NULL,

CONSTRAINT fk_posts_users

FOREIGN KEY (user_id) REFERENCES users(id),

CONSTRAINT fk_posts_pictures

FOREIGN KEY (picture_id) REFERENCES pictures(id)

);

 

CREATE TABLE comments (

id INT(11) PRIMARY KEY AUTO_INCREMENT,

content VARCHAR(255) NOT NULL,

user_id INT(11) NOT NULL,

post_id INT(11) NOT NULL,

CONSTRAINT fk_comments_users

FOREIGN KEY (user_id) REFERENCES users(id),

CONSTRAINT fk_comments_posts

FOREIGN KEY (post_id) REFERENCES posts(id)

);

 

CREATE TABLE users_followers (

user_id INT(11),

follower_id INT(11),

CONSTRAINT fk_user_users

FOREIGN KEY (user_id) REFERENCES users(id),

CONSTRAINT fk_user_followers

FOREIGN KEY (follower_id) REFERENCES users(id)

);

0