iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0

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;

這樣一來,特惠價格就計算出來了。
Day16 Result1

小心 NULL

承上,如果你的計算式中有包含 "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;

Day16 Result2

至於避免出現 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。
Day16 Result3

下一篇來提比較計算子,除了有一些符號的表示和平時的程式撰寫習慣不太相同外,另外也會討論如何處理 NULL 的問題。


上一篇
Day 15 - SQL 基本語法 - 有條件的選資料和 回傳 JSON 格式
下一篇
Day17 - 比較運算子
系列文
SQL 30天手把手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言