In SQL this can be done with window functions and OVER PARTITION
SELECT * , AVG (Value) OVER (PARTITION BY [ID]) AS [AverageByID] , AVG (Value) OVER() AS [OverallAverage] FROM [data]