T-SQL query - how to AVG() the SUM() of columns' rows to a new row column?
If you are looking for a different solution, you could always unpivot the data, aggregate and then join back on the source table.  Here is an example.

Also, thank you so much for including sample table and data to work with, so much easier.

;WITH CTE_Unpivot AS
    (
    SELECT StudentID, MarkSubject, Mark 
    FROM dbo.Students AS S
        UNPIVOT (Mark FOR MarkSubject IN (Biology, Maths, [Geography])) AS upvt
    )
, CTE_Average AS
    (
    SELECT StudentID, AVG(Mark) AS StudentAverage
    FROM CTE_Unpivot AS U
    GROUP BY StudentID 
    )
SELECT S.StudentID
    , S.StudentName
    , S.StudentSurname
    , S.Biology
    , S.Maths
    , S.[Geography]
    , A.StudentAverage
FROM dbo.Students AS S
    LEFT OUTER JOIN CTE_Average AS A ON S.StudentID = A.StudentID


I feel the need to point out that this is less efficient than just adding the fields together and dividing them.  Manipulating the data like this touches it multiple times, which means that it is more likley to spill to tempdb and have a higher cpu cost.  Probably negligible, but still.