MySQL greatest()和least()函數

在本教程中,您將學習如何使用MySQL GREATESTLEAST函數分別找到兩個或多個字段的最大和最小值。

MySQL GREATEST和LEAST函數介紹

GREATESTLEAST函數都使用N個參數,並分別返回最大和最小值。下面說明GREATESTLEAST函數的語法:

GREATEST(value1, value2, ...);
LEAST(value1,value2,...);
SQL

參數可能具有混合數據類型。以下比較規則適用於這兩個函數:

  • 如果任何參數爲NULL,則兩個函數都將立即返回NULL,而不進行任何比較。
  • 如果在INTREAL上下文中使用函數,或者所有參數都是整數值或REAL值,那麼它們將分別作爲INTREAL來比較。
  • 如果參數由數字和字符串組成,則函數將它們作爲數字進行比較。
  • 如果至少一個參數是非二進制(字符)字符串,則函數將將參數作爲非二進制字符串進行比較。
  • 在所有其他情況下,函數將參數作爲二進制字符串進行比較

以下示例演示了GREATESTLEAST函數的工作原理。

SELECT GREATEST(10, 20, 30),  -- 30
       LEAST(10, 20, 30); -- 10


SELECT GREATEST(10, null, 30),  -- null
       LEAST(10, null , 30); -- null
SQL

MySQL GREATEST和最小值的例子

下面爲了演示,我們來創建一個名稱爲:revenues的新表。

USE testdb;

CREATE TABLE IF NOT EXISTS revenues (
    company_id INT PRIMARY KEY,
    q1 DECIMAL(19 , 2 ),
    q2 DECIMAL(19 , 2 ),
    q3 DECIMAL(19 , 2 ),
    q4 DECIMAL(19 , 2 )
);
SQL

revenues表由company_id作爲主鍵,其它四個列分別存儲每季度公司的收入。

以下語句在revenues表中插入兩行 -

INSERT INTO revenues(company_id,q1,q2,q3,q4)
VALUES (1,100,120,110,130),
       (2,250,260,300,310);
SQL

要獲得每個公司的最高和最低收入,可使用GREATESTLOWEST,如下查詢語句:

SELECT 
    company_id,
    LEAST(q1, q2, q3, q4) low,
    GREATEST(q1, q2, q3, q4) high
FROM
    revenues;
SQL

執行上面查詢語句,得到以下結果 -

+------------+--------+--------+
| company_id | low    | high   |
+------------+--------+--------+
|          1 | 100.00 | 130.00 |
|          2 | 250.00 | 310.00 |
+------------+--------+--------+
2 rows in set
SQL

如果任何參數爲NULL,則GREATESTLEAST函數都返回NULL,這可能不是我們想要的。爲了避免這種情況,可以使用IFNULL函數將NULL視爲零來執行數字比較。

以下語句向revenues表中插入在q4列中帶有NULL值的一條新行。

INSERT INTO revenues(company_id,q1,q2,q3,q4)
VALUES (3,100,120,110,null);
SQL

如果使用GREATESTLEAST函數來查詢數據,則可以得到按預期設計的結果。

SELECT 
    company_id,
    LEAST(q1, q2, q3, q4) low,
    GREATEST(q1, q2, q3, q4) high
FROM
    revenues;
SQL

執行上面查詢語句,得到以下結果 -

+------------+--------+--------+
| company_id | low    | high   |
+------------+--------+--------+
|          1 | 100.00 | 130.00 |
|          2 | 250.00 | 310.00 |
|          3 | NULL   | NULL   |
+------------+--------+--------+
3 rows in set
SQL

如上面查詢所見,其ID=3的公司的最低值和最高值爲NULL

爲避免這種情況,您可以使用IFNULL函數,如下:

SELECT 
    company_id,
    LEAST(IFNULL(q1, 0),
            IFNULL(q2, 0),
            IFNULL(q3, 0),
            IFNULL(q4, 0)) low,
    GREATEST(IFNULL(q1, 0),
            IFNULL(q2, 0),
            IFNULL(q3, 0),
            IFNULL(q4, 0)) high
FROM
    revenues;
SQL

執行上面查詢語句,得到以下結果 -

+------------+--------+--------+
| company_id | low    | high   |
+------------+--------+--------+
|          1 | 100.00 | 130.00 |
|          2 | 250.00 | 310.00 |
|          3 | 0.00   | 120.00 |
+------------+--------+--------+
3 rows in set
SQL

在本教程中,您已經學習瞭如何使用MySQL GREATESTLEAST函數來查找值列表中最大和最小的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章