select tu.id as userId,tu."name",tm.totalUploaded,tm.categories,tm.totalProcessed from t_user tu left join ( select tm.user_id userId, count(tm.user_id) totalUploaded, string_agg(distinct tm.label_id,',') categories, COUNT(CASE WHEN tm.status != 10 THEN 1 END) totalProcessed from t_monitor tm where date(tm.create_time) = CURRENT_DATE group by tm.user_id ) tm on tu.id = tm.userId union all select 0 as userId, 'python上传' as name, count(tm.user_id) totalUploaded, string_agg(distinct tm.label_id,',') categories, COUNT(CASE WHEN tm.status != 10 THEN 1 END) totalProcessed from t_monitor tm where date(tm.create_time) = CURRENT_DATE and tm.user_id = 0 group by tm.user_id;
时间: 2024-02-05 16:03:16 浏览: 127
这是一个 SQL 查询语句,它的作用是查询当天上传文件的用户信息和文件上传统计信息。具体解释如下:
1. 查询语句包含两个部分,用 `UNION ALL` 连接起来。第一个部分查询普通用户上传的文件信息,第二个部分查询系统上传的文件信息。
2. 第一个部分的查询语句如下:
```
select
tu.id as userId,
tu."name",
tm.totalUploaded,
tm.categories,
tm.totalProcessed
from
t_user tu
left join
( select
tm.user_id userId,
count(tm.user_id) totalUploaded,
string_agg(distinct tm.label_id,',') categories,
COUNT(CASE WHEN tm.status != 10 THEN 1 END) totalProcessed
from
t_monitor tm
where
date(tm.create_time) = CURRENT_DATE
group by
tm.user_id
) tm on tu.id = tm.userId
```
该查询语句使用了 `LEFT JOIN` 连接了 `t_user` 表和一个子查询。子查询使用了聚合函数 `COUNT` 和 `string_agg` 对 `t_monitor` 表中的数据进行统计。具体来说,子查询中的 `count(tm.user_id)` 统计了每个用户上传的文件总数,`string_agg(distinct tm.label_id,',')` 统计了每个用户上传文件所属的类别,`COUNT(CASE WHEN tm.status != 10 THEN 1 END)` 统计了每个用户已经处理的文件数(`status != 10` 表示文件不处于处理中状态)。
3. 第二个部分的查询语句如下:
```
select
0 as userId,
'python上传' as name,
count(tm.user_id) totalUploaded,
string_agg(distinct tm.label_id,',') categories,
COUNT(CASE WHEN tm.status != 10 THEN 1 END) totalProcessed
from
t_monitor tm
where
date(tm.create_time) = CURRENT_DATE
and tm.user_id = 0
group by
tm.user_id;
```
该查询语句统计了系统上传的文件信息,使用了 `COUNT` 和 `string_agg` 函数对 `t_monitor` 表中的数据进行统计,`COUNT(CASE WHEN tm.status != 10 THEN 1 END)` 统计了系统上传的文件中已经处理的文件数(`status != 10` 表示文件不处于处理中状态)。注意到该查询语句中的 `userId` 被设置为 0,表示该部分查询结果不属于任何用户。
4. `UNION ALL` 连接两个部分的查询结果,返回最终的查询结果。
总体来说,该查询语句主要用于上传文件的统计和展示,可以用于监控系统性能和用户上传情况。
阅读全文