介紹如何在 PostgreSQL 資料庫中使用 GREATEST
與 LEAST
函數,計算多欄位的最大值與最小值。
測試用資料
建立一張儲存學生成績用的 grades
資料表:
-- 建立 grades 資料表 CREATE TABLE grades ( id SERIAL PRIMARY KEY, -- 序號 name VARCHAR(255), -- 名字 score_a SMALLINT, -- 成績 A score_b SMALLINT, -- 成績 B score_c SMALLINT -- 成績 C );
插入一些學生成績的資料:
-- 插入測試資料 INSERT INTO grades (name, score_a, score_b, score_c) VALUES ('Jake', 99, 87, 84), ('Harry', 79, 81, 94), ('Robert', 92, 67, 54), ('Michael', 91, 97, 74);
查詢 grades
資料表中的資料:
-- 查詢 grades 資料表內容 SELECT * FROM grades;
id | name | score_a | score_b | score_c ----+---------+---------+---------+--------- 1 | Jake | 99 | 87 | 84 2 | Harry | 79 | 81 | 94 3 | Robert | 92 | 67 | 54 4 | Michael | 91 | 97 | 74 (4 rows)
這張表格中的每一筆資料就是每一位學生的三次考試成績。
GREATEST
取最大值
GREATEST
可以用來計算多個欄位值之中的最大值。
假設我們想要計算每位學生在三次考試成績之中,成績最高的那一次是幾分,就可以使用 GREATEST
函數:
-- 查詢每位學生三次成績的最高分 SELECT GREATEST(score_a, score_b, score_c) FROM grades;
greatest ---------- 99 94 92 97 (4 rows)
若要根據三次成績的最高分來排序,則可執行:
-- 根據三次成績的最高分來排序 SELECT * FROM grades ORDER BY GREATEST(score_a, score_b, score_c) DESC;
id | name | score_a | score_b | score_c ----+---------+---------+---------+--------- 1 | Jake | 99 | 87 | 84 4 | Michael | 91 | 97 | 74 2 | Harry | 79 | 81 | 94 3 | Robert | 92 | 67 | 54 (4 rows)
LEAST
取最小值
LEAST
函數可以用來取得多個欄位值的最小值,若要查詢每位學生三次成績的最低分,則可執行:
-- 查詢每位學生三次成績的最低分 SELECT LEAST(score_a, score_b, score_c) FROM grades;
least ------- 84 79 54 74 (4 rows)
若要根據三次成績的最低分來排序,則可執行:
-- 根據三次成績的最高分來排序 SELECT * FROM grades ORDER BY LEAST(score_a, score_b, score_c) ASC;
id | name | score_a | score_b | score_c ----+---------+---------+---------+--------- 3 | Robert | 92 | 67 | 54 4 | Michael | 91 | 97 | 74 2 | Harry | 79 | 81 | 94 1 | Jake | 99 | 87 | 84 (4 rows)