[英]PostgreSQL: SELECT MAX numeric value for entire table from multiple columns
我有一個類似的表(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;
試試下面的:
我們將通過 GREATEST 和 MAX 實現:
GREATEST
返回每個用戶記錄的 A 級和 B 級列之間的大值MAX
返回最高成績。SELECT
MAX(GREATEST(gradeA::integer, gradeB::integer)) as maxGrade
FROM
"table_name"
WHERE
"table_name"."name" = 'David';
我建議橫向連接:
select max(grade::int) as max_grade
from t cross join lateral
(values (gradea), (gradeb)) v(grade)
where name = 'David';
特別是,如果任何等級是NULL
,則此方法有效。
它也可以很容易地調整以獲得最高等級:
select v.*
from t cross join lateral
(values ('a', gradea), ('b', gradeb)) v(which, grade)
where name = 'David'
order by grade::int desc
limit 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.