sql - 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 值,应转换为数值以进行比较
解决方案
你需要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;
推荐阅读
- c - 使用 dup2() 打印 execvp 命令的标准输出时遇到问题?
- playwright - 编剧:如果http状态为500则停止
- matrix - Eigen3:仅沿一维的动态矩阵:构造失败
- typescript - 如何使用字典的索引获取字典的键?
- php - 如何自动为发布到 WordPress 的内容为空的帖子添加随机描述?
- csv - 试图从 csv 文件中获取所有行,其中第 8 列等于使用 awk 的值,但它会打印所有行和匹配行两次
- reactjs - 渲染不同的组件 (yyy) 时无法更新组件 (xxx)
- serialization - NestJS Schema First GraphQL 序列化
- html - 如何修复 html css 样式问题?
- c++ - VS 代码、GCC(MinGW/WinLibs)、Win10:#include
-> "#include 检测到错误。请更新您的 IncludePath",但 #include "[abs path]" 没问题