我有一张318记录表。以下是表中包含的信息示例。
select * from TableName
输出:
TestSequence RunTime TestName
1 12.00 Shark
1 12.01 Shark
1 13.02 Shark
2 15.02 Lion
2 10.13 Lion
2 16.03 Lion
3 18.02 pig
3 12.58 pig
3 17.00 pig
4 14.69 Bird
4 15.96 Bird
4 16.32 Bird
正如您所看到的,每个TestName在表中有3个条目,运行时间不同。所以我想要的是计算每个TestName的平均RunTime。
这是我期待的结果:
TestSequence TestName AverageRunTime
1 Shark 12.50
2 Lion 13.26
3 pig 12.56
4 Bird 15.36
我希望存储过程能够计算表中所有318行的平均运行时间。我从来没有在我的生活中创建过一个存储过程,因为我还是从大学毕业。
我正在尝试构建一个存储过程,如下所示:
USE [DBName];
GO
CREATE PROCEDURE Test_CalculateAverageRunTime
@TestName varchar(50),
@TestSenquence varchar(50),
@RunTime varchar(50)
AS
SET NOCOUNT ON;
SELECT TestName, TestSequence, AVG(RunTime)
FROM TableName
WHERE TestSequence = @TestSenquence
Group By TestName, TestSequence;
GO
还有其他方法可以做什么吗?
答案 0 :(得分:1)
您需要的是:
SELECT TestName, TestSequence, AVG(RunTime)
FROM TableName
WHERE TestSequence = @TestSenquence
GROUP BY TestName, TestSequence
如果您使用AVG等聚合函数,则需要GROUP BY
。您只需要@TestSenquence
作为参数。你的其余部分都很好。
将始终针对FROM
子句中指定的表运行存储过程。如果你想动态地更改表名,那么这是一个完全不同的区域。
这是最好的解决方案。您需要的是运行带有变量/参数的脚本来确定输出=>存储过程是未来的方向。另一种方法是创建一个表值函数,但这样就太过分了。
答案 1 :(得分:1)
如果您想要表中的所有行,请删除where
子句。存储过程看起来更像是这样:
CREATE PROCEDURE Test_CalculateAverageRunTime ()
AS
BEGIN
SET NOCOUNT ON;
SELECT TestName, TestSequence, AVG(RunTime) as avg_RunTime
FROM TableName
Group By TestName, TestSequence;
END;
但是,我认为内联表值函数可能更合适:
CREATE FUNCTION Test_CalculateAverageRunTime ()
RETURNS TABLE AS
RETURN( SELECT TestName, TestSequence, AVG(RunTime) as avg_RunTime
FROM TableName
Group By TestName, TestSequence
);
然后您可以在查询中使用结果。