SQL - 數值函數

歡迎,未來的SQL魔法師們!今天,我們要進入SQL數值函數的神奇世界。別擔心如果你之前從未寫過一行代碼——我會成為你這次冒險的友好導遊。到了這個教學的結尾,你將會像專家一樣操縱數字!

SQL - Numeric Functions

什麼是SQL數值函數?

想像你是一位廚房中的廚師。你有很多工具來切、割和切丁你的食材。SQL數值函數就像是那些廚房工具,但用於數字。它們幫助我們對數據庫中的數值數據進行計算和轉換。

常見的SQL數值函數

讓我們來看看一些SQL中最有用的數值函數。我為你們準備了一個方便的表格來參考:

函數 描述 範例
ABS() 返回絕對值 ABS(-5) = 5
ROUND() 將數字四捨五入到指定位小數 ROUND(3.14159, 2) = 3.14
CEILING() 返回大於或等於給定數字的最小整數 CEILING(3.1) = 4
FLOOR() 返回小於或等於給定數字的最大整數 FLOOR(3.9) = 3
POWER() 將數字提升到指定次方 POWER(2, 3) = 8
SQRT() 返回數字的平方根 SQRT(16) = 4

現在,讓我們詳細探討這些函數,並提供一些實用的範例。

ABS()函數

ABS()函數返回數字的絕對值。簡單來說,它會移除數字的負號(如果有的話)。

SELECT ABS(-10) AS absolute_value;

這個查詢將返回:

absolute_value
--------------
10

想像你正在計算兩個溫度之間的差異。你不關心它是正數還是負數;你只想知道它的範圍。這就是ABS()派上用場的地方!

ROUND()函數

ROUND()就像那個總是在餐廳裡把賬單四捨五入的朋友。它將數字四捨五入到指定位的小數。

SELECT ROUND(3.14159, 2) AS rounded_pi;

結果:

rounded_pi
----------
3.14

當處理貨幣或當你需要簡化報告中的大數字時,這個函數非常有用。

CEILING()和FLOOR()函數

這些函數就像是數字世界中的超級成就者和平凡者。CEILING()總是向上取整到最接近的整數,而FLOOR()總是向下取整。

SELECT CEILING(3.1) AS ceiling_value, FLOOR(3.9) AS floor_value;

結果:

ceiling_value | floor_value
--------------+------------
4             | 3

我喜歡把CEILING()看作是樂觀主義者(總是往上看)而FLOOR()看作是悲觀主義者(總是往下看)。在計算中明智地使用它們!

POWER()函數

POWER()就像給你的數字超能力!它將數字提升到指定的次方。

SELECT POWER(2, 3) AS two_cubed;

結果:

two_cubed
---------
8

這個函數在科學計算或當你需要計算複利(你未來的自己會感謝你學會這個!)時特別有用。

SQRT()函數

SQRT()是平方根函數。它像找到一個數字,當它自己乘以自己時,給你原始數字。

SELECT SQRT(16) AS square_root;

結果:

square_root
-----------
4

有趣的事實:古代巴比倫人使用的一種計算平方根的方法與今天計算機使用的方法驚人地相似!

結合所有知識

現在我們已經單獨學習了這些函數,讓我們看看如何在真實世界的情況中將它們結合起來。想像你正在分析一家小商業的銷售數據。

CREATE TABLE sales (
id INT PRIMARY KEY,
product_name VARCHAR(50),
sale_amount DECIMAL(10, 2),
discount DECIMAL(5, 2)
);

INSERT INTO sales VALUES
(1, 'Widget A', 100.00, 10.50),
(2, 'Gadget B', 75.25, 5.00),
(3, 'Doohickey C', 50.75, 2.25);

SELECT
product_name,
sale_amount,
discount,
ROUND(sale_amount - discount, 2) AS net_sale,
CEILING(POWER(net_sale, 1.05)) AS loyalty_points
FROM
sales;

這個查詢計算了折扣後的淨銷售金額,並根據稍微膨脹的淨銷售值分配忠誠度積分。讓我們分解一下:

  1. 我們創建一個表並插入一些樣本數據。
  2. 我們使用ROUND()來計算折扣後的淨銷售金額到小數點後兩位。
  3. 我們使用POWER()來稍微膨脹淨銷售(將其提升到1.05次方)。
  4. 最後,我們使用CEILING()來將忠誠度積分四捨五入到最接近的整數。

結果可能如下所示:

product_name | sale_amount | discount | net_sale | loyalty_points
-------------+-------------+----------+----------+----------------
Widget A     | 100.00      | 10.50    | 89.50    | 115
Gadget B     | 75.25       | 5.00     | 70.25    | 89
Doohickey C  | 50.75       | 2.25     | 48.50    | 60

結論

恭喜你!你已經邁出了進入SQL數值函數世界的第一步。記住,熟練是由練習得來的。嘗試使用你自己的數據或範例來玩轉這些函數。不要害怕犯錯誤——這是我們學習的方式!

在我多年的教學經驗中,我發現那些實驗並享受SQL學習的學生是最終真正掌握它的學生。所以,勇往直前,計算、四捨五入並提升你的數據!誰知道呢?也許你會發現,在SQL中處理數字就像解決一個挑戰性的謎題或創造一件美麗的藝術品一樣令人滿足。

持續編程,持續學習,最重要的是,在SQL中保持樂趣!

Credits: Image by storyset