每份试卷和每个题目被作答的人数和次数
某学校软件学院组织进行线上答题,现要统计每份试卷和每个题目被作答的人数和次数。
要求编写一个SQL查询,请统计每个题目和每份试卷被作答的人数和次数,需返回类别(tid)、人数(uv)、次数(pv),类别按类别ID(tid)升序输出,试卷类和题目类分别按人数(uv)和次数(pv)降序输出。
数据库中有两个表:exam_record和practice_record。
题目练习表practice_record存储了题目信息,包括用户ID(uid)、题目ID(question_id)、提交时间(submit_time)、得分(score)。
试卷作答记录表exam_record存储了用户答题信息,包括用户ID(uid)、试卷ID(exam_id)、开始作答时间(start_time)、交卷时间(submit_time)、得分(score)。
测试用例 1
输入:
drop table if exists practice_record;
CREATE TABLE practice_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid int NOT NULL COMMENT '用户ID',
question_id int NOT NULL COMMENT '题目ID',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
drop table if exists exam_record;
CREATE TABLE exam_record (
id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
uid int NOT NULL COMMENT '用户ID',
exam_id int NOT NULL COMMENT '试卷ID',
start_time datetime NOT NULL COMMENT '开始时间',
submit_time datetime COMMENT '提交时间',
score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO practice_record(uid,question_id,submit_time,score) VALUES
(1001, 8001, '2024-07-02 11:41:01', 60),
(1002, 8001, '2024-07-02 19:30:01', 50),
(1002, 8001, '2024-07-02 19:20:01', 70),
(1002, 8002, '2024-07-02 19:38:01', 70),
(1003, 8001, '2024-07-02 19:38:01', 70),
(1003, 8001, '2024-07-02 19:48:01', 90),
(1003, 8002, '2024-07-01 19:38:01', 80);
INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2024-07-01 09:01:01', '2024-07-01 09:41:01', 81),
(1002, 9002, '2024-07-01 12:01:01', '2024-07-01 12:31:01', 70),
(1002, 9001, '2024-07-01 19:01:01', '2024-07-01 19:40:01', 80),
(1002, 9002, '2024-07-01 12:01:01', '2024-07-01 12:31:01', 70),
(1004, 9001, '2024-07-01 19:01:01', '2024-07-01 19:40:01', 85),
(1002, 9002, '2024-07-01 12:01:01', null, null);
输出:
tid uv pv
8001 3 5
8002 2 2
9001 3 3
9002 1 3