J'ai deux tables appelées Reviews and 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,
Je veux être en mesure de sélectionner essentiellement la table des niveaux avec une colonne supplémentaire qui serait la moyenne de tous les avis associés à ce LevelID. J'ai actuellement ce code
SELECT AVG(Rating) AS Average, Name,Levels.LevelID,Blocks FROM Reviews, Levels WHERE Levels.LevelID = Reviews.LevelID GROUP BY Levels.LevelID, Name, Blocks
Cela renvoie les résultats corrects pour les niveaux ayant au less une révision. Je veux être en mesure de returnner les niveaux qui n'ont pas d'avis ainsi et donne juste une note moyenne de 0.
Essayez avec cette requête … il va certainement résoudre votre problème ….
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
SELECT AVG(Rating) AS Average, Name, Levels.LevelID, Blocks FROM Reviews, Levels WHERE Levels.LevelID = Reviews.LevelID GROUP BY Levels.LevelID, Name, Blocks UNION SELECT 0 AS Average, Name, LevelID, Blocks FROM Levels WHERE NOT EXISTS ( SELECT * FROM Reviews WHERE Levels.LevelID = Reviews.LevelID );