select mon,name,avg(days) '人均月活天数' from ( select DATE_FORMAT(l.create_time,'%Y-%m') mon,o.name,l.userid,count(distinct DATE_FORMAT(l.create_time,'%y-%m-%d')) days from sys_log l,sys_user s,basic_tm_organize o,sys_user_depart up ,sys_depart p where l.log_content like '%登录成功%' and s.organize_id = o.id and l.userid = s.username and l.create_time > '2021-11-01 00:00:00' and up.dep_id = p.id and up.user_id = s.id and p.depart_name != '智库事业部' group by DATE_FORMAT(create_time,'%Y-%m'),l.userid,o.name ) z group by mon,name ;请解释一下这段SQL
时间: 2024-02-01 15:16:03 浏览: 109
这段SQL查询的是一个系统的用户活跃度,通过统计每个用户在每个月内的登录天数来计算其活跃度。具体解释如下:
1. 外层查询语句:
```
select mon,name,avg(days) '人均月活天数'
```
查询结果包括三列,分别是月份(mon)、部门名称(name)和人均月活天数(avg(days))。
2. 内层查询语句:
```
select DATE_FORMAT(l.create_time,'%Y-%m') mon,o.name,l.userid,count(distinct DATE_FORMAT(l.create_time,'%y-%m-%d')) days
from sys_log l,sys_user s,basic_tm_organize o,sys_user_depart up ,sys_depart p
where l.log_content like '%登录成功%'
and s.organize_id = o.id
and l.userid = s.username
and l.create_time > '2021-11-01 00:00:00'
and up.dep_id = p.id
and up.user_id = s.id
and p.depart_name != '智库事业部'
group by DATE_FORMAT(create_time,'%Y-%m'),l.userid,o.name
```
这里进行了多表关联查询,包括sys_log、sys_user、basic_tm_organize、sys_user_depart和sys_depart五张表,查询条件为:
- 日志内容包括“登录成功”;
- 用户属于某个组织机构;
- 日志记录的用户ID与用户表中的用户名相同;
- 日志记录时间在2021年11月1日之后;
- 用户所在部门不是“智库事业部”。
查询结果包括四列,分别是月份(mon)、部门名称(name)、用户ID(userid)和该用户在该月内的登录天数(days)。
3. 整个查询语句:
```
select mon,name,avg(days) '人均月活天数' from (内层查询语句) z group by mon,name ;
```
这里使用了内层查询语句作为子查询,然后按照月份和部门名称分组,计算每个部门每个月的人均月活天数。
阅读全文