我有一个包含两个表的数据库:一个表列出了几个用户,另一个表列出了这些用户所做的每个操作、进行操作的用户的 ID 和操作的日期。
我正在尝试计算每个用户每月执行的操作数。我不确定如何有效地做到这一点:有人有什么建议吗?
我有一个包含两个表的数据库:一个表列出了几个用户,另一个表列出了这些用户所做的每个操作、进行操作的用户的 ID 和操作的日期。
我正在尝试计算每个用户每月执行的操作数。我不确定如何有效地做到这一点:有人有什么建议吗?
用于从 andMONTH()
中提取月份DATE
,然后从 andGROUP BY
中MONTH
提取月份USER_ID
:
SELECT u.user_id, MONTH(a.date), COUNT(*) number_of_actions
FROM users u INNER JOIN actions a ON (u.user_id = a.user_id)
GROUP BY u.user_id, MONTH(a.date)
此外,如果用户操作跨越多年,并且您希望2011 年 1 月和2012年 1 月有不同的计数,请按两者 YEAR
分组,而MONTH
不是:
SELECT u.user_id, YEAR(a.date), MONTH(a.date), COUNT(*) number_of_actions
FROM users u INNER JOIN actions a ON (u.user_id = a.user_id)
GROUP BY u.user_id, YEAR(a.date), MONTH(a.date)
如果@Joao Silva 的回答太慢,您可以使用触发器或存储过程进行更新来维护计数,因为操作发生在单独表中的单独表中。如果基于磁盘的表太慢,您可以使用内存表并在服务器重新启动时重建它,或者使用 Redis 实例来保留此信息。