首页 > 解决方案 > PostgreSQL:从多列中为整个表选择最大数值

问题描述

我有一个类似的表(3行,4列:id,name,gradeA,gradeB):

id    name    gradeA    gradeB
------------------------------
1     David   59        78
2     Anna    66        92
3     David   22        89

我正在寻找一个查询,它将按条件在整个表中为我提供最高等级的 1 个数字属性。例如:

任何名叫大卫的学生的最高成绩是多少?

答案应该是 { maxGrade: 89 }

注意:成绩存储为 varchar 值,应转换为数值以进行比较

标签: sqlpostgresql

解决方案


你需要max()结合greatest()

select max(greatest(gradea::int, gradeb::int)) as max_grade
from the_table
where name = 'David';

如果您需要JSON结果(因为您写道:结果应该是 {maxGrade: 89}),您可以包装该查询并将该行转换为 JSON:

select to_jsonb(t) 
from (
  select max(greatest(gradea::int, gradeb::int)) as "maxGrade"
  from the_table
  where name = 'David'
) t;

推荐阅读