【发布时间】:2019-08-28 18:16:38
【问题描述】:
我是 Sql 查询的新手。我需要构建一个查询,该查询将根据学生获得 100% 的测试次数除以他参加的测试总数来对学生进行排名,并仅考虑 10 天前的测试。这是我的表结构。
CREATE TABLE student(
id serial NOT NULL,student_email varchar NULL,
student_name varchar NULL,
test_subject varchar NULL,
total_question varchar NULL,
total_passed varchar NULL,
total_failed varchar NULL,
total_skipped varchar NULL,
test_time timestamp NULL,
CONSTRAINT student PRIMARY KEY (id));
如果学生的 total_failed 或 total_skipped 不为 0,则该测试不被视为 100%。
样本数据会是这样的
1 j@b.com john maths 10 10 0 0 2019-08-20 21:00:00
2 j@b.com john maths 10 10 0 0 2019-08-19 21:00:00
3 j@b.com john maths 10 09 1 0 2019-08-18 21:00:00
4 j@b.com john english 10 10 0 0 2019-08-20 21:00:00
5 j@b.com john english 10 10 0 0 2019-08-19 21:00:00
6 j@b.com john english 10 09 0 1 2019-08-20 21:00:00
7 p@b.com paul maths 10 10 0 0 2019-08-20 21:00:00
8 p@b.com paul maths 10 10 0 0 2019-08-19 21:00:00
9 p@b.com paul maths 10 10 0 0 2019-08-18 21:00:00
10 k@b.com koki maths 10 10 0 0 2019-06-20 21:00:00
11 k@b.com koki english 10 10 0 0 2019-06-20 21:00:00
12 k@b.com koki science 10 10 0 0 2019-08-20 21:00:00
13 k@b.com koki maths 10 08 2 0 2019-08-20 21:00:00
14 k@b.com koki english 10 10 0 0 2019-08-20 21:00:00
从上面的数据集中,我只需要考虑那些在 10 天内的数据,并根据每个不同的 subject_name,student 的测试总数除以 100% 的测试总数来给出“排名”。 上述数据集的输出将是
koki science 100% k@b.com
koki english 100% k@b.com
paul maths 100% p@b.com
john maths 66.6% j@b.com
john english 66.6% j@b.com
koki science 0% k@b.com
任何帮助表示赞赏
【问题讨论】:
标签: sql database postgresql rank