我正在做一个简单的学生标记报告应用程序,并尝试通过sql语句从数据库中的两个实体对象创建一个View对象。 学生详细信息 - > rollno,名字。 标记 - > rollno,internal,sub1,sub2,sub3
学生有两门考试,即内部= 1和内部= 2,内部= 3是作业分配提交标记。
标记表快照如下。绘图表因为我无法在此处附加快照。
从标记中选择*显示如下:
---------------------------------
ROLLNO | INTERNAL | SUB1 | SUB2 |
1 | 1 | 12 | 15 |
1 | 2 | 15 | 17 |
1 | 3 | 2 | 5 |
2 | 1 | 10 | 14 |
--------------------------------
为了计算聚合标记,我们必须从内部= 1和内部= 2平均标记,并为每个rollno(学生)添加内部= 3的标记。有人可以帮我构建这个查询。
答案 0 :(得分:0)
从你的问题中不清楚究竟什么是平均值给出结果,但这是一个你可以建立的尝试。
我会将你的问题分解成几部分。
为了计算聚合标记,我们必须平均标记 - 所以我们将使用AVG( )
函数。
- 因此WHERE
子句将作为WHERE internal=1 or internal=2
。
并添加内部= 3的标记棘手 - 需要将内部= 3的行视为单独的表格,并使用JOIN
链接它们。
因此,我们按学生组合行,这需要GROUP BY
。
以下是最后声明:
select m1.rollno, avg(m1.sub1+m1.sub2)+m2.sub1+m2.sub2 as result
from marks as m1
inner join marks as m2
on m1.rollno = m2.rollno
where m1.internal in (1,2)
and m2.internal = 3
group by rollno
以下是您可以进行实验的实例:http://sqlfiddle.com/#!2/9ed4e0/1
平均和添加的方式可能不正确,但很难从您的问题中辨别出您真正需要的内容。改变这部分应该很容易。
请注意,由于internal = 3的行代表不同类型的数据,因此它们应该位于不同的表中,除非您有经验确定您正在做的事情是可行的。