Получить данные на основе COUNT () и MONTH () в MySQL

0

У меня есть users и мне likes таблицы. Внешний ключ последнего ссылается на идентификатор из таблицы users. Задача заключается в том, чтобы получить всех отдельных пользователей, у которых в марте 2018 года более 100, нравится. Я пытаюсь извлечь связанные с датой значения из столбца с типом TIMESTAMP

Я придумал, только видя, что почти все из них имеют некоторые виды в этот период:

SELECT DISTINCT u.name 
FROM users AS u 
JOIN likes AS l ON u.id = l.user_id
WHERE MONTH(l.timestamp) = 3 AND YEAR(l.timestamp) = 2018;

Я предполагаю, что я должен использовать COUNT() и GROUP BY каким-то образом, но вся моя борьба приводила к синтаксическим ошибкам. Пожалуйста, дайте руку.

Теги:

1 ответ

3
Лучший ответ

Вы не хотите, чтобы select distinct. Вы хотите иметь group by и having:

SELECT u.name 
FROM users u JOIN
     likes l
     ON u.id = l.user_id
WHERE MONTH(l.timestamp) = 3 AND YEAR(l.timestamp) = 2018
GROUP BY u.name
HAVING COUNT(*) > 100;

Если честно, лучше написать WHERE следующим образом:

WHERE l.timestamp >= '2018-03-01' AND l.timestamp < '2018-04-01'

Это позволяет механизму SQL использовать индекс в timestamp, если таковой имеется.

  • 0
    Having count(*) > 100 для users who have more than 100 likes требований, users who have more than 100 likes
  • 0
    +10. или, INSERT INTO likes (user_id,timestamp) VALUES ('Gordon Linoff',NOW()); COMMIT;
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню