SQL字段作为其他字段的总和

时间:2010-11-25 15:25:23

标签: sql field sum

这与查询无关,我想知道的是,是否可以将列中的字段显示为其他字段的总和。有点像Excel。

作为一个例子,我有两个表:

食谱

nrecepie integer
name varchar(255)
time integer

和另一个

说明

nintrucion integer
nrecepie integer
time integer

所以,基本上,作为一个配方有我想要的指令

recipes.time = sum(intructions.time)

这可以在create table脚本中完成吗?如果是这样,怎么样?

5 个答案:

答案 0 :(得分:4)

您可以使用视图:

CREATE VIEW recipes_with_time AS
SELECT nrecepie, name, SUM(Instructions.time) AS total_time
FROM Recepies
JOIN Instructions USING (nrecepie)
GROUP BY Recepies.nrecepie

如果您确实希望在真实表中包含该数据,则必须使用触发器。

答案 1 :(得分:2)

这可以通过INSERT/UPDATE/DELETE触发器完成。每次在表Instructions中更改数据时,触发器都会运行并更新value中的Recepies时间。

答案 2 :(得分:0)

每次更改指令表时,您都可以使用触发器更新时间列,但更“正常”(更少冗余)的方式是通过指令之间的连接上的group by子句计算时间列。 recepies [sic] table。

答案 3 :(得分:0)

取决于数据库供应商...例如,在SQL Server中,您可以创建一个列,该列根据同一行中其他列的值计算其值。它们被称为计算列,你这样做:

Create Table MyTable
 (
     colA Integer,
     colB Integer,
     colC Intgeer,
     SumABC As colA + colB + colC
 )

一般情况下,只需输入所需的列名,单词“as”以及公式或公式来计算值。这种方法不使用aditonal存储,它会在每次有人执行select aganist时计算值,因此表格配置文件仍然更窄,并且您可以获得更好的性能。唯一的下行代码是您无法在计算列上放置索引。 (尽管SQL服务器中有一个标志,允许您指定数据库在创建或更新时应该保留该值...在这种情况下可以将其编入索引)

但是,在您的示例中,您正在访问另一个表中多行的数据。为此,您需要其他响应者建议的触发器。

答案 4 :(得分:0)

通常,您希望避免这种情况,因为您存储的是派生信息(出于性能原因,存在例外情况)。因此,最好的解决方案是按照AndreKR的建议创建一个视图。这提供了一个总是正确的总数,从数据库中选择就像在实际的存储列中一样容易。