すべてのデータが既にメモリ内にある場合を除き、データベースに正しいデータを選択させる方が効率的です。
成績をフィールドとしてデータベースに保存する場合は、クエリを実行できるように正規化する必要があります。最良の方法は、データベースを再設計し、成績を別のテーブルの行として配置することです。データは、フィールド名としてではなく、テーブルのフィールドにある必要があります。
select top 3 GradeName, Grade
from Grades
where StudentId = 42
order by Grade desc
その場でデータを正規化することもできますが、もちろんそれはほとんど効率的ではありません。
select top 3 GradeName, Grade
from (
select GradeName = 'Engrish', Grade = Engrish from Students where StudentId = 42
union all
select 'Drama', Drama from Students where StudentId = 42
union all
select 'Math', Math from Students where StudentId = 42
union all
select 'Chemistry', Chemistry from Students where StudentId = 42
) Grades
order by Grade desc