在sql中取平均两行并在同一列中添加第三行

时间:2014-10-22 21:42:17

标签: sql relational-database

我正在做一个简单的学生标记报告应用程序,并尝试通过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的标记。有人可以帮我构建这个查询。

1 个答案:

答案 0 :(得分:0)

从你的问题中不清楚究竟什么是平均值给出结果,但这是一个你可以建立的尝试。

我会将你的问题分解成几部分。

为了计算聚合标记,我们必须平均标记 - 所以我们将使用AVG( )函数。

来自internal = 1和internal = 2 的

- 因此WHERE子句将作为WHERE internal=1 or internal=2

并添加内部= 3的标记棘手 - 需要将内部= 3的行视为单独的表格,并使用JOIN链接它们。

每个rollno(学生)

因此,我们按学生组合行,这需要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的行代表不同类型的数据,因此它们应该位于不同的表中,除非您有经验确定您正在做的事情是可行的。