我有两个表,称为 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,

我希望能够基本上选择带有额外列的 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

这将为至少有一个评论的级别返回正确的结果。我也希望能够返回没有评论的级别,并且只给出 0 的平均评分。

最佳答案

尝试使用此查询...它肯定会解决您的问题....

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

关于sql - 在 SQL Server 2008 中对空集执行时强制 AVG 返回 0 而不是 NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9661757/

10-11 05:07