有⽇志如下,请写出代码求得所有⽤⼾和活跃⽤⼾的总数及平均年龄。(活跃⽤⼾指连续两天都有访 问记录的⽤⼾) 字段分别是:⽇期 ⽤⼾ 年龄⽤sql 实现:所有⽤⼾和活跃⽤⼾的总数及平均年龄。(活跃⽤⼾指连续两天都有访问记录的⽤⼾)
时间: 2024-02-21 16:59:12 浏览: 31
好的,根据您的问题,我来给您解答。
假设您的日志记录表名为 Log,包含三个字段:date(日期),user_id(用户ID),age(年龄)。那么,可以使用以下 SQL 语句来求得所有用户和活跃用户的总数及平均年龄。
```
SELECT
COUNT(DISTINCT user_id) AS total_users,
COUNT(DISTINCT IF(exists_2_days, user_id, NULL)) AS active_users,
AVG(age) AS avg_age
FROM (
SELECT
user_id,
age,
COUNT(DISTINCT date) AS days_visited,
MAX(date) OVER(PARTITION BY user_id) AS max_date,
MAX(IF(date = DATE_SUB(max_date, INTERVAL 1 DAY), 1, 0)) OVER(PARTITION BY user_id) AS exists_2_days
FROM Log
) t;
```
这条 SQL 语句的实现思路是,首先通过子查询对每个用户计算出其访问天数、最近访问日期和是否存在连续两天访问记录的标志(exists_2_days)。接着,在外部查询中,使用 DISTINCT 关键字分别计算出总用户数和活跃用户数(即存在连续两天访问记录的用户数),并使用 AVG 函数计算出平均年龄。