【发布时间】:2014-11-02 20:16:45
【问题描述】:
我有两张表要注册TESTS 和GRADES
表TEST (id_test, id_person, retry)
表GRADE (id_grade, id_test, id_question, grade)
有人可能会进行第二次测试,在这种情况下,重试将是 char 'Y'(表示是) 现在我需要总结按人分组的所有成绩。
问题是,当我按人分组时,总和来自测试重试'N' 和重试'Y'。
但是如果一个人有重试,我只想总结这个。
例子
如果TEST (id_test, id_person, retry) 有值
(1,1,'N')
(2,1,'Y')
(3,2,'N')
而GRADE (id_grade, id_test, id_question, grade) 有值
(1, 1, 1, 4)
(2, 1, 2, 4)
(3, 1, 3, 4)
(4, 2, 1, 5)
(5, 2, 2, 5)
(6, 2, 3, 5)
(7, 3, 1, 7)
(8, 3, 2, 7)
(9, 3, 3, 7)
我希望人 #1 的总和是 15 (5+5+5) 而不是 27 ( (5+5+5) + (4+4+4) )。而对于没有重试的人#2,总和是 21。我怎样才能得到一个人的名单和它的 sql 等级?
【问题讨论】:
-
可以放where子句。
-
如果你有一个重试值来标识所有要求和的测试......或者如果重试列是整数(那么你可以 MAX 它)。但是,您将如何识别要计数的测试?测试只能重试一次吗?如果您有多次重试,重试列中的值是多少?最后一次重试是哪个?
-
你从哪里得到值 15 和 27?
-
请添加详细信息。您使用的是什么 RDBMS?可以使用什么逻辑来识别要求和的测试?具有最高 id 或基于重试列的东西。
-
甲骨文。 sql 应该返回所有人员的列表及其成绩的总和。但是因为它是按人列出的。如果一个人有一个重试,总和应该只得到这一个的成绩。还需要考虑有些人没有进行第二次测试。
标签: sql sum conditional-statements