Your should fix your data structure. Normally, when you have columns that contains the same data and are only distinguished by numbers at the end, you have a bad structure. You want a table that looks like:
Regno Subj Mark
with one row per student and subj. This is called a junction table, and part of the process of normalizing the data.
You can create one on the fly for this query, but you should really fix the data structure:
select subj, avg(mark)
from ((select regno, subj1 as subj, mark1 as mark from studentmark) union all
(select regno, subj2 as subj, mark2 as mark from studentmark) union all
(select regno, subj3 as subj, mark3 as mark from studentmark) union all
(select regno, subj4 as subj, mark4 as mark from studentmark)
) sm
group by sub;
Sample in SQL Fiddle.
group byaggregate query.