输出2021年里,所有每次试卷得分都能到85分的人以及至少有一次用了一半时间就完成高难度试卷且分数大于80的人的id和活动号,按用户ID排序输出,用oracle语法写出
时间: 2024-03-13 08:46:22 浏览: 46
假设我们有一个名为"exam_result"的表,包含以下列:user_id, activity_id, score, duration。
下面是 Oracle SQL 查询语句,可以实现您的要求:
```
SELECT DISTINCT user_id, activity_id
FROM exam_result
WHERE score = 85
AND user_id IN (
SELECT user_id
FROM exam_result
WHERE score > 80 AND duration <= (SELECT AVG(duration) FROM exam_result) / 2
)
ORDER BY user_id ASC;
```
这个查询语句的意思是,先找到所有每次试卷得分都能到85分的人,然后在这些人中筛选出至少有一次用了一半时间就完成高难度试卷且分数大于80的人,最后按照用户ID排序输出。
相关问题
输出2021年里,所有每次试卷得分都能到85分的人以及至少有一次用了一半时间就完成高难度试卷且分数大于80的人的id和活动号,按用户ID排序输出。
假设有一个表叫做"exam_results",它有以下列:
- user_id:用户ID
- activity_id:活动ID
- score:得分
- time_taken:用时(以分钟为单位)
下面是一种可能的 SQL 查询,用于解决你刚才提出的问题:
```
SELECT user_id, activity_id
FROM exam_results
WHERE score >= 85
AND user_id IN (
SELECT user_id
FROM exam_results
WHERE time_taken <= (SELECT AVG(time_taken) FROM exam_results)
AND score > 80
)
AND YEAR(activity_date) = 2021
ORDER BY user_id ASC;
```
这个查询首先找到所有得分大于等于85分的人,然后在这个人群中找到那些至少有一次用了一半时间就完成高难度试卷且分数大于80的人。最后,根据用户ID进行排序输出。可能需要根据实际情况进行修改。
请统计2021年每个未完成试卷作答数大于1的有效用户的数据(有效用户指完成试卷作答数至少为1且未完成数小于5), 输出用户ID、未完成试卷作答数、完成试卷作答数、作答过的试卷tag集合,按未完成试卷数量由多到少排序。使用oracle语法
好的,以下是相应的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 语句用于按条件统计数量。如果您在其他数据库中使用该语句,请根据具体情况进行调整。