在SQL Server 2008中的空集上执行预处理时,强制AVG返回0而不是NULL

Pri*_*lon 3 sql t-sql sql-server aggregate-functions sql-server-2008

我有两个名为Reviews和Levels的表.

CREATE TABLE [dbo].[Reviews](
    [ReviewID] [int] IDENTITY(1,1) NOT NULL,
    [Rating] [float] NOT NULL,
    [LevelID] [int] NOT NULL,

CREATE TABLE [dbo].[Levels](
    [Name] [varchar](50) NOT NULL,
    [Blocks] [char](960) NOT NULL,
    [LevelID] [int] IDENTITY(1,1) NOT NULL,
Run Code Online (Sandbox Code Playgroud)

我希望能够基本上选择Levels表,其中包含一个额外的列,该列是与该LevelID相关的所有评论的平均值.我目前有这个代码

SELECT   AVG(Rating) AS Average, Name,Levels.LevelID,Blocks
FROM     Reviews, Levels
WHERE    Levels.LevelID = Reviews.LevelID
GROUP BY Levels.LevelID, Name, Blocks
Run Code Online (Sandbox Code Playgroud)

这将返回至少包含一次审阅的级别的正确结果.我希望能够返回没有评论的级别,只需给出平均评分0.

小智 5

试试这个查询......它肯定会解决你的问题....

SELECT ISNULL(AVG(Rating),0) AS Average, Name,Levels.LevelID,Blocks
FROM Levels LEFT JOIN Reviews
ON Levels.LevelID = Reviews.LevelID
GROUP BY Levels.LevelID, Name, Blocks
Run Code Online (Sandbox Code Playgroud)