У меня есть 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
каким-то образом, но вся моя борьба приводила к синтаксическим ошибкам. Пожалуйста, дайте руку.
Вы не хотите, чтобы 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
, если таковой имеется.
Having count(*) > 100
дляusers who have more than 100 likes
требований,users who have more than 100 likes
INSERT INTO likes (user_id,timestamp) VALUES ('Gordon Linoff',NOW()); COMMIT;