2015-09-30 36 views
1

我正在嘗試編寫一個存儲過程,它將返回一個數字(平均值) - 這是我迄今爲止的數據...如何返回SQL Server存儲過程的計算(聚合)結果

ALTER PROCEDURE [dbo].[sp_GetAverageRating] 
    @RecipeNodeId int 
AS 
    SET NOCOUNT ON; 

    (SELECT SUM(Rating) AS RatingTotal 
    FROM dbo.RecipeRating 
    WHERE RecipeNodeId = @RecipeNodeId) 

    (SELECT 
     COUNT(Rating) AS RatingEntries 
    FROM dbo.RecipeRating 
    WHERE RecipeNodeId = @RecipeNodeId) 

所以這個作品,給我

A.)評分共
B.)評級條目

我想從存儲過程返回評分共/評級條目數。

任何人都可以幫助我的語法嗎?

+1

看起來像你正試圖從dbo.RecipeRating'計算average..'select AVG(等級)?那是對的嗎? –

+0

不知道有一個平均功能....我現在做:-)謝謝 –

+0

附註:你應該**不要**爲存儲過程使用'sp_'前綴。微軟[留作自己使用前綴(見*命名存儲過程*)(http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),和你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

回答

2

只需使用AVG功能:

SELECT AVG(Rating) as RatingTotal 
FROM dbo.RecipeRating 
WHERE RecipeNodeId = @RecipeNodeId 
+1

也許把它放在UDF而不是SPROC中會更有意義。 'create function fnAvgRating(@RecipeNodeId int)從dbo.RecipeRating返回小數點作爲select avg(Rating),其中RecipeNodeId = @ RecipeNodeId' – ewahner