ฟังก์ชัน MIN() และ MAX() คืออะไร?
ในบทเรียนที่ผ่านมา เราได้เรียนรู้เกี่ยวกับฟังก์ชัน AVG() ที่ใช้ในการหาค่าเฉลี่ยของข้อมูล ในบทนี้ เราจะมาทำความรู้จักกับอีกสองฟังก์ชันที่มีประโยชน์อย่างมากในการวิเคราะห์ข้อมูล นั่นคือ MIN() และ MAX() ฟังก์ชันเหล่านี้ใช้เพื่อหาค่าที่น้อยที่สุด (minimum) และค่าที่มากที่สุด (maximum) ในคอลัมน์ที่กำหนด
MIN(column_name)
ฟังก์ชัน MIN(column_name) ใช้เพื่อหาค่าที่น้อยที่สุดในคอลัมน์ที่ระบุ โดยจะละเว้นค่า NULL ในการคำนวณ
รูปแบบการใช้งาน:
SELECT MIN(column_name) FROM table_name;
ตัวอย่าง:
สมมติว่าเรามีตาราง products ที่เก็บข้อมูลเกี่ยวกับสินค้า:
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255),
price DECIMAL(10, 2),
stock INT
);
INSERT INTO products (product_id, product_name, price, stock) VALUES
(1, 'เสื้อยืด', 250.00, 50),
(2, 'กางเกงยีนส์', 790.00, 30),
(3, 'รองเท้าผ้าใบ', 1200.00, 20),
(4, 'หมวก', 150.00, 100),
(5, 'ถุงเท้า', 50.00, 200);
หากเราต้องการทราบราคาสินค้าที่ถูกที่สุดในตาราง เราสามารถใช้คำสั่ง:
SELECT MIN(price) AS minimum_price FROM products;
ผลลัพธ์ที่ได้:
+---------------+
| minimum_price |
+---------------+
| 50.00 |
+---------------+
1 row in set (0.00 sec)
จากผลลัพธ์ เราทราบว่าราคาสินค้าที่ถูกที่สุดคือ 50.00 บาท
MAX(column_name)
ฟังก์ชัน MAX(column_name) ใช้เพื่อหาค่าที่มากที่สุดในคอลัมน์ที่ระบุ โดยจะละเว้นค่า NULL ในการคำนวณ
รูปแบบการใช้งาน:
SELECT MAX(column_name) FROM table_name;
ตัวอย่าง:
จากตาราง products เดิม หากเราต้องการทราบราคาสินค้าที่แพงที่สุดในตาราง เราสามารถใช้คำสั่ง:
SELECT MAX(price) AS maximum_price FROM products;
ผลลัพธ์ที่ได้:
+---------------+
| maximum_price |
+---------------+
| 1200.00 |
+---------------+
1 row in set (0.00 sec)
จากผลลัพธ์ เราทราบว่าราคาสินค้าที่แพงที่สุดคือ 1200.00 บาท
การใช้งานร่วมกับ WHERE Clause
เช่นเดียวกับฟังก์ชันอื่นๆ ที่เราได้เรียนรู้มา เราสามารถใช้ MIN() และ MAX() ร่วมกับ WHERE clause เพื่อกรองข้อมูลก่อนที่จะหาค่าต่ำสุดและสูงสุดได้
ตัวอย่าง:
หากเราต้องการหาราคาสินค้าที่ถูกที่สุดและแพงที่สุดเฉพาะสินค้าที่มี stock มากกว่า 50 ชิ้น เราสามารถใช้คำสั่ง:
SELECT
MIN(price) AS minimum_price,
MAX(price) AS maximum_price
FROM products
WHERE stock > 50;
ผลลัพธ์ที่ได้:
+---------------+---------------+
| minimum_price | maximum_price |
+---------------+---------------+
| 50.00 | 150.00 |
+---------------+---------------+
1 row in set (0.00 sec)
จากผลลัพธ์ เราทราบว่าราคาสินค้าที่ถูกที่สุดที่มี stock มากกว่า 50 ชิ้น คือ 50.00 บาท และราคาสินค้าที่แพงที่สุดคือ 150.00 บาท
การใช้งานร่วมกับ GROUP BY Clause
เรายังสามารถใช้ MIN() และ MAX() ร่วมกับ GROUP BY clause เพื่อหาค่าต่ำสุดและสูงสุดในแต่ละกลุ่มได้
ตัวอย่าง:
สมมติว่าเรามีตาราง orders ที่เก็บข้อมูลเกี่ยวกับการสั่งซื้อสินค้า:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
product_id INT,
order_date DATE,
quantity INT
);
INSERT INTO orders (order_id, customer_id, product_id, order_date, quantity) VALUES
(1, 101, 1, '2023-10-26', 2),
(2, 101, 2, '2023-10-26', 1),
(3, 102, 3, '2023-10-26', 3),
(4, 102, 1, '2023-10-27', 1),
(5, 103, 2, '2023-10-27', 2);
หากเราต้องการทราบวันที่ที่มีการสั่งซื้อครั้งแรกและครั้งสุดท้ายของลูกค้าแต่ละคน เราสามารถใช้คำสั่ง:
SELECT
customer_id,
MIN(order_date) AS first_order_date,
MAX(order_date) AS last_order_date
FROM orders
GROUP BY customer_id;
ผลลัพธ์ที่ได้:
+-------------+--------------------+-------------------+
| customer_id | first_order_date | last_order_date |
+-------------+--------------------+-------------------+
| 101 | 2023-10-26 | 2023-10-26 |
| 102 | 2023-10-26 | 2023-10-27 |
| 103 | 2023-10-27 | 2023-10-27 |
+-------------+--------------------+-------------------+
3 rows in set (0.00 sec)
จากผลลัพธ์ เราทราบวันที่ที่มีการสั่งซื้อครั้งแรกและครั้งสุดท้ายของลูกค้าแต่ละคน
Data Types ที่รองรับ
ฟังก์ชัน MIN() และ MAX() สามารถใช้ได้กับ Data Types หลายประเภท ไม่ว่าจะเป็น:
- Numeric types:
INT,DECIMAL,FLOAT,DOUBLE - String types:
VARCHAR,CHAR,TEXT - Date and Time types:
DATE,DATETIME,TIMESTAMP
ตัวอย่างการใช้งานกับ String:
SELECT MIN(product_name) AS first_product, MAX(product_name) AS last_product FROM products;
โดย MySQL จะทำการเปรียบเทียบ String ตามลำดับตัวอักษร (lexicographical order)
ตัวอย่างการใช้งานกับ Date:
SELECT MIN(order_date) AS earliest_order, MAX(order_date) AS latest_order FROM orders;
ในกรณีของ Date, MIN() จะคืนค่าวันที่ที่เก่าแก่ที่สุด และ MAX() จะคืนค่าวันที่ที่ใหม่ที่สุด
ข้อผิดพลาดที่พบบ่อย
- การใช้กับคอลัมน์ที่มี Data Type ไม่ถูกต้อง: หากใช้
MIN()หรือMAX()กับคอลัมน์ที่มี Data Type ที่ไม่สามารถเปรียบเทียบค่าได้ (เช่นBLOBหรือJSON) MySQL จะคืนค่า Error - การลืมใส่ alias: หากไม่ได้ใส่ alias ให้กับคอลัมน์ที่ได้จากการใช้
MIN()หรือMAX()ชื่อคอลัมน์ในผลลัพธ์อาจจะไม่สื่อความหมาย - การเข้าใจผิดเกี่ยวกับค่า NULL: อย่าลืมว่า
MIN()และMAX()จะละเว้นค่าNULLหากคอลัมน์มีแต่ค่าNULLฟังก์ชันจะคืนค่าNULL
ตัวอย่าง:
CREATE TABLE example (
id INT PRIMARY KEY,
value INT
);
INSERT INTO example (id, value) VALUES
(1, 10),
(2, NULL),
(3, 20);
SELECT MIN(value), MAX(value) FROM example;
ผลลัพธ์:
+------------+------------+
| MIN(value) | MAX(value) |
+------------+------------+
| 10 | 20 |
+------------+------------+
1 row in set (0.00 sec)
จะเห็นได้ว่าค่า NULL ถูกละเว้น
สรุป
ฟังก์ชัน MIN() และ MAX() เป็นเครื่องมือที่มีประโยชน์ในการวิเคราะห์ข้อมูลใน MySQL ช่วยให้เราสามารถหาค่าที่น้อยที่สุดและมากที่สุดในคอลัมน์ที่กำหนดได้อย่างง่ายดาย และสามารถใช้ร่วมกับ WHERE และ GROUP BY clauses เพื่อเพิ่มความยืดหยุ่นในการใช้งาน
ในบทเรียนถัดไป เราจะเรียนรู้เกี่ยวกับ GROUP BY clause ซึ่งเป็นเครื่องมือที่สำคัญในการจัดกลุ่มข้อมูลและทำการวิเคราะห์ในแต่ละกลุ่ม