Как получить пользователя с наибольшим количеством комментариев из таблицы - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь получить имя пользователя с наибольшим количеством комментариев. Как я могу это сделать? Вот таблицы.
Таблицы ниже представляют собой настройки для таблиц базы данных, которые я пытаюсь запросить.

CREATE TABLE User(
        userid varchar(3),
        firstname varchar(20),
        lastname varchar(20),
        age int, 
        PRIMARY KEY(userid)
    )ENGINE=INNODB;


    CREATE TABLE Comment(
        commentid varchar(3),
        userid varchar(3),
        eventid varchar(3),
        title varchar(20),
        comment varchar(50),
        PRIMARY KEY(commentid),
        FOREIGN KEY(userid) REFERENCES AnonymousUser(userid),
        FOREIGN KEY(eventid) REFERENCES Event(eventid)
    )ENGINE=INNODB;


    INSERT INTO User VALUES('U01','Charles','Darwin',99);
    INSERT INTO User VALUES('U02','Keisha','Strawn',24);
    INSERT INTO User VALUES('U03','Denise','Malcolm',59);
    INSERT INTO User VALUES('U04','Dennis','Stewart',19);
    INSERT INTO User VALUES('U05','Robert','Johns',45);
    INSERT INTO User VALUES('U06','Marsha','Stewart',33);

    INSERT INTO Comment VALUES ('C01','A01','E01','Boring Event','This event was boring');
    INSERT INTO Comment VALUES ('C02','A02','E01','Nice Nice Event','This event was Nice');
    INSERT INTO Comment VALUES ('C03','A03','E03','Wow','This event was Amazing');
    INSERT INTO Comment VALUES ('C04','A01','E01','Very Sad','I missed this event');

запрос, который я пробовал:

SELECT User.userid FROM User 
JOIN comment ON comment.userid = user.userid 
WHERE (SELECT COUNT(comment) 
FROM comment = (SELECT MAX(userid) FROM comment); 

Ответы [ 2 ]

3 голосов
/ 20 марта 2019
SELECT 
    userid
FROM
    comment
GROUP BY userid
ORDER BY count(userid) DESC
LIMIT 1;

Редактировать: о, вам нужно имя пользователя.Попробуйте это:

SELECT firstname 
FROM user 
WHERE userid = (
    SELECT 
        userid
    FROM
        comment
    GROUP BY userid
    ORDER BY count(userid) DESC
    LIMIT 1
);
0 голосов
/ 21 марта 2019

Запрос на получение имени с наибольшим количеством комментариев:

select a.firstname, max(a.comment_count) from (
    select u.firstname, count(c.commentid) comment_count
    from user u join comment c on u.userid = c.userid
    group by u.firstname
)a;

Тем не менее, я заметил

  1. Одно из ограничений таблицы 'comment' указывает на таблицу 'AnonymousUser' FOREIGN KEY (идентификатор пользователя) ССЫЛКИ AnonymousUser (идентификатор пользователя) . Вы не поделились оператором создания таблицы для этой таблицы. Мне пришлось удалить это ограничение из определения таблицы, чтобы успешно создать эту таблицу в моей базе данных
CREATE TABLE Comment(
  commentid varchar(3),
  userid varchar(3),
  eventid varchar(3),
  title varchar(20),
  comment varchar(50),
  PRIMARY KEY(commentid)
);   
  1. Ваш набор данных для таблицы 'comment' не имеет идентификатора пользователя, соответствующего значениям 'user.userid'

Я обновил вставки таблицы 'comment', чтобы получить некоторый результат при выполнении моего запроса.

INSERT INTO Comment VALUES ('C01','U01','E01','Boring Event','This event was boring');
INSERT INTO Comment VALUES ('C02','U01','E01','Nice Nice Event','This event was Nice');
INSERT INTO Comment VALUES ('C03','U03','E03','Wow','This event was Amazing');
INSERT INTO Comment VALUES ('C04','U06','E01','Very Sad','I missed this event');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...