Take average of multiple nullable columns
The only correct and scalable solution to that problem is to normalize your model. 

However, you can normalize the data "on the fly" and then use standard SQL aggregation on the result. 

select name, avg(t.val)
from the_table
  cross join unnest (array["2010","2011","2012"]) with ordinality as t(val)
group by name;


Online example: https://rextester.com/TGTC30399

But I would strongly recommend to fix your data model by properly normalizing it.