Home > OS >  How to find the maximum value in a row in plpgsql?
How to find the maximum value in a row in plpgsql?

Time:01-08

I am having the following table

Student Id Subject A Subject B Subject C Subject D
1 98 87 76 100
2 90 100 64 71

This table contains information about the marks scored by students in various subject.

Now I need to find the maximum mark scored by each student among the various subject

I need the output to be like

Student Id Subjects Maximum Mark
1 Subject D 100
2 Subject B 100

CodePudding user response:

This would need a lateral join with the list of subject/mark from the corresponding columns. This works for any number of Subject X columns.

select ext."Student Id", l.* 
from the_table ext, lateral
(
   select l.key, l.value::numeric 
   from the_table t, lateral json_each_text(to_json(t)) l(key, value)
   where "Student Id" = ext."Student Id" and l.key like 'Subject%'
   order by l.value::numeric desc limit 1
) l;

DB-Fiddle demo

  • Related