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 1274 Точки

гледам както си го написал но малко ми е трудно да се ориентирам без самата база.До колкото разбирам имаш 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.