1

我有一个包含两个表的数据库:一个表列出了几个用户,另一个表列出了这些用户所做的每个操作、进行操作的用户的 ID 和操作的日期。

我正在尝试计算每个用户每月执行的操作数。我不确定如何有效地做到这一点:有人有什么建议吗?

4

2 回答 2

2

用于从 andMONTH()中提取月份DATE,然后从 andGROUP BYMONTH提取月份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)
于 2012-09-23T15:52:06.207 回答
0

如果@Joao Silva 的回答太慢,您可以使用触发器或存储过程进行更新来维护计数,因为操作发生在单独表中的单独表中。如果基于磁盘的表太慢,您可以使用内存表并在服务器重新启动时重建它,或者使用 Redis 实例来保留此信息。

于 2012-09-23T16:54:52.080 回答