SQL 敘述句中是可以填入數學計算式的,像是常用的加減乘除符號和小括號。
當然也遵守「有括號優先計算」、「先乘除後加減」這兩個原則。
計算方式 | 符號 |
---|---|
加法 | + |
減法 | - |
乘法 | * |
除法 | / |
以先前的表格為例,若今天要臨時新增一個特惠價格(session_price),算法如下:
session_price = (cost_price+40)*0.75
因為這一欄位會隨狀況調整,所以不打算改變整個資料表的結構,改以輸出的時候額外作計算來呈現。
SELECT id, name, category, cost_price,
(cost_price+40) * 0.75 AS 'session_price', purchase_date
FROM Product;
這樣一來,特惠價格就計算出來了。
承上,如果你的計算式中有包含 "NULL",那麼得到的結果就一定會是 NULL。你可以輸入以下的指令來試試看:
/*
A. 9 + NULL
B. 5 - NULL
C. 2 * NULL
D. 7 / NULL
E. NULL / 4
F. NULL / 0
*/
SELECT id,
cost_price + NULL AS 'priceA',
cost_price - NULL AS 'priceB',
cost_price * NULL AS 'priceC',
cost_price / NULL AS 'priceD',
NULL / 4 AS 'priceE',
NULL / 0 AS 'priceF'
FROM Product;
至於避免出現 NULL 的方法,可以使用內建的 COALESCE 函數,將可能會出現的 NULL 的欄位給包含起來,它會回傳包含的欄位內「第一個不是 NULL」 的值。
/*傳回其引數中第一個非 Null 的運算式*/
/*COALESCE(資料一,資料二,資料三)*/
/*表格中有先自行新增了一筆 cost_price 為 NULL 的資料*/
SELECT id, name, COALESCE(cost_price, 0) AS "test_null_result" FROM Product;
結果如下:當 cost_price 為 NULL 時,會用 0 取代,避免出現 NULL。
下一篇來提比較計算子,除了有一些符號的表示和平時的程式撰寫習慣不太相同外,另外也會討論如何處理 NULL 的問題。