请统计2021年每个未完成试卷作答数大于1的有效用户的数据(有效用户指完成试卷作答数至少为1且未完成数小于5), 输出用户ID、未完成试卷作答数、完成试卷作答数、作答过的试卷tag集合,按未完成试卷数量由多到少排序。使用oracle语法
时间: 2024-03-11 22:50:53 浏览: 61
好的,以下是相应的Oracle SQL语句:
```
SELECT
user_id,
COUNT(CASE WHEN is_finished = 0 THEN 1 END) AS unfinished_count,
COUNT(CASE WHEN is_finished = 1 THEN 1 END) AS finished_count,
LISTAGG(DISTINCT tag, ',') WITHIN GROUP (ORDER BY tag) AS tag_list
FROM
(
SELECT
user_id,
is_finished,
tag
FROM
exam_records
WHERE
YEAR(exam_time) = 2021
)
GROUP BY
user_id
HAVING
COUNT(CASE WHEN is_finished = 1 THEN 1 END) >= 1 AND COUNT(CASE WHEN is_finished = 0 THEN 1 END) < 5
ORDER BY
unfinished_count DESC;
```
这个查询语句首先在 exam_records 表中筛选出了 2021 年的记录,然后按 user_id 进行分组,统计出每个用户的未完成试卷作答数(unfinished_count)、完成试卷作答数(finished_count)和作答过的试卷 tag 集合(tag_list),最后按照未完成试卷数量由多到少排序。
需要注意的是,这个查询语句中使用了 Oracle 的一些语法,比如 LISTAGG 函数用于将同一用户作答过的试卷 tag 进行拼接,WITHIN GROUP 用于指定拼接时的分隔符,CASE WHEN 语句用于按条件统计数量。如果您在其他数据库中使用该语句,请根据具体情况进行调整。
阅读全文