- 在MariaDB较新版本(支持窗口函数等特性)中:
WITH UserActionsLast7Days AS (
SELECT user_id, action_type, action_time
FROM user_actions
WHERE action_time >= CURDATE() - INTERVAL 7 DAY
),
UserActionTypeCount AS (
SELECT user_id, COUNT(DISTINCT action_type) AS action_type_count
FROM UserActionsLast7Days
GROUP BY user_id
)
SELECT COUNT(*) AS active_user_count
FROM UserActionTypeCount
WHERE action_type_count >= 3;
- 在MariaDB较旧版本(不支持窗口函数等特性)中:
SELECT COUNT(*) AS active_user_count
FROM (
SELECT user_id, COUNT(DISTINCT action_type) AS action_type_count
FROM user_actions
WHERE action_time >= CURDATE() - INTERVAL 7 DAY
GROUP BY user_id
HAVING action_type_count >= 3
) AS SubQuery;
MariaDB不同版本调整说明
- 较新版本:可以利用公共表达式(CTE,即
WITH
子句)使查询结构更清晰,便于理解和维护。窗口函数等特性也可以用于更复杂的分析场景,但在这个简单查询中未涉及。
- 较旧版本:没有CTE特性,需要将子查询直接嵌套在主查询中。语法上更加紧凑,但可读性可能会稍差一些。同时,较旧版本可能对一些新的日期和时间函数支持有限,不过
CURDATE()
和INTERVAL
在较旧版本中通常也是支持的。