我有users
和likes
个表格。后者的外键引用users
表中的id。手头的任务是在2018年3月检索拥有超过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
,但我所有的挣扎都会导致语法错误。请伸出手。
答案 0 :(得分: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
上使用索引(如果有的话)。