ฟังก์ชัน AVG() คืออะไร?
ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับฟังก์ชัน SUM() ที่ใช้ในการหาผลรวมของข้อมูล วันนี้เราจะมาทำความรู้จักกับฟังก์ชันที่คล้ายกัน แต่มีประโยชน์ในอีกรูปแบบหนึ่ง นั่นคือ ฟังก์ชัน AVG() ซึ่งย่อมาจาก "Average" หรือค่าเฉลี่ย นั่นเอง
ฟังก์ชัน AVG() ใน MySQL ใช้สำหรับคำนวณหาค่าเฉลี่ยของค่าทั้งหมดในคอลัมน์ที่ระบุ โดยคอลัมน์นั้นจะต้องเป็นชนิดข้อมูลที่เป็นตัวเลข (Numeric Data Type) เช่น INT, DECIMAL, FLOAT หรือ DOUBLE หากคอลัมน์นั้นไม่ใช่ตัวเลข MySQL จะพยายามแปลงค่าให้เป็นตัวเลขก่อน แต่ถ้าไม่สามารถแปลงได้ จะเกิดข้อผิดพลาดขึ้น
รูปแบบการใช้งาน AVG()
รูปแบบการใช้งานพื้นฐานของฟังก์ชัน AVG() คือ:
SELECT AVG(column_name)
FROM table_name;
โดยที่:
column_nameคือชื่อคอลัมน์ที่คุณต้องการหาค่าเฉลี่ยtable_nameคือชื่อตารางที่คอลัมน์นั้นอยู่
ตัวอย่างการใช้งาน AVG()
สมมติว่าเรามีตารางชื่อ products ที่เก็บข้อมูลสินค้า และมีคอลัมน์ price ที่เก็บราคาสินค้า เราสามารถหาค่าเฉลี่ยของราคาสินค้าทั้งหมดได้ดังนี้:
SELECT AVG(price)
FROM products;
ผลลัพธ์ที่ได้จะเป็นค่าเฉลี่ยของราคาสินค้าทั้งหมดในตาราง products
ข้อควรระวัง: ค่า NULL
สิ่งสำคัญที่ต้องระวังในการใช้งานฟังก์ชัน AVG() คือค่า NULL โดยปกติแล้ว ฟังก์ชัน AVG() จะไม่นำค่า NULL มาคำนวณในการหาค่าเฉลี่ย นั่นหมายความว่า ถ้าในคอลัมน์ที่คุณกำลังหาค่าเฉลี่ยมีค่า NULL อยู่ ค่าเหล่านั้นจะถูกละเว้นไป
ตัวอย่างเช่น ถ้าตาราง products ของเรามีข้อมูลดังนี้:
+----+------------+-------+
| id | name | price |
+----+------------+-------+
| 1 | Product A | 10.00 |
| 2 | Product B | 20.00 |
| 3 | Product C | NULL |
| 4 | Product D | 30.00 |
+----+------------+-------+
เมื่อเราใช้คำสั่ง SELECT AVG(price) FROM products; ผลลัพธ์ที่ได้จะเป็น 20.00 ( (10 + 20 + 30) / 3 ) ค่า NULL ในแถวของ Product C จะถูกละเว้น
การใช้งาน AVG() ร่วมกับ WHERE Clause
เช่นเดียวกับฟังก์ชันอื่นๆ เราสามารถใช้ AVG() ร่วมกับ WHERE clause เพื่อหาค่าเฉลี่ยของข้อมูลที่ตรงตามเงื่อนไขที่กำหนดได้
ตัวอย่างเช่น ถ้าเราต้องการหาค่าเฉลี่ยของราคาสินค้าที่มีราคาสูงกว่า 15 บาท เราสามารถทำได้ดังนี้:
SELECT AVG(price)
FROM products
WHERE price > 15;
ในกรณีนี้ ฟังก์ชัน AVG() จะคำนวณค่าเฉลี่ยเฉพาะราคาสินค้าที่มากกว่า 15 บาทเท่านั้น
การใช้งาน AVG() ร่วมกับ GROUP BY Clause
AVG() มักถูกใช้ร่วมกับ GROUP BY clause เพื่อหาค่าเฉลี่ยของข้อมูลในแต่ละกลุ่ม ซึ่งมีประโยชน์อย่างมากในการวิเคราะห์ข้อมูลเชิงลึก
สมมติว่าตาราง products ของเรามีคอลัมน์ category ที่ระบุประเภทของสินค้า เราสามารถหาค่าเฉลี่ยของราคาสินค้าในแต่ละประเภทได้ดังนี้:
SELECT category, AVG(price)
FROM products
GROUP BY category;
ผลลัพธ์ที่ได้จะเป็นค่าเฉลี่ยของราคาสินค้าสำหรับแต่ละประเภท ตัวอย่างเช่น:
+----------+------------+
| category | AVG(price) |
+----------+------------+
| Electronics | 25.00 |
| Clothing | 12.50 |
+----------+------------+
ซึ่งหมายความว่า สินค้าประเภท Electronics มีราคาเฉลี่ย 25 บาท และสินค้าประเภท Clothing มีราคาเฉลี่ย 12.50 บาท
ตัวอย่างการใช้งานจริง: การวิเคราะห์ยอดขาย
ลองพิจารณาสถานการณ์จริงที่บริษัทขายสินค้าออนไลน์แห่งหนึ่งต้องการวิเคราะห์ยอดขายของตนเอง พวกเขาเก็บข้อมูลยอดขายในตารางชื่อ sales ซึ่งมีคอลัมน์ order_date (วันที่สั่งซื้อ), product_id (รหัสสินค้า) และ amount (จำนวนเงินที่ขายได้)
ถ้าบริษัทต้องการทราบยอดขายเฉลี่ยต่อวัน พวกเขาสามารถใช้คำสั่ง SQL ต่อไปนี้:
SELECT order_date, AVG(amount) AS average_daily_sales
FROM sales
GROUP BY order_date
ORDER BY order_date;
คำสั่งนี้จะแสดงยอดขายเฉลี่ยสำหรับแต่ละวัน โดยเรียงลำดับตามวันที่
นอกจากนี้ หากบริษัทต้องการทราบยอดขายเฉลี่ยต่อเดือน พวกเขาสามารถใช้ฟังก์ชัน MONTH() และ YEAR() เพื่อจัดกลุ่มข้อมูลตามเดือนและปีได้:
SELECT YEAR(order_date) AS year, MONTH(order_date) AS month, AVG(amount) AS average_monthly_sales
FROM sales
GROUP BY YEAR(order_date), MONTH(order_date)
ORDER BY YEAR(order_date), MONTH(order_date);
คำสั่งนี้จะแสดงยอดขายเฉลี่ยสำหรับแต่ละเดือน โดยเรียงลำดับตามปีและเดือน
ข้อผิดพลาดที่พบบ่อย
ข้อผิดพลาดที่พบบ่อยในการใช้งาน AVG() คือการใช้กับคอลัมน์ที่ไม่ใช่ตัวเลข หรือการลืมจัดการค่า NULL อย่างเหมาะสม
1. การใช้กับคอลัมน์ที่ไม่ใช่ตัวเลข:
ถ้าคุณพยายามใช้ AVG() กับคอลัมน์ที่เป็นข้อความ (เช่น VARCHAR หรือ TEXT) MySQL จะพยายามแปลงค่าในคอลัมน์นั้นให้เป็นตัวเลขก่อน ถ้าไม่สามารถแปลงได้ จะเกิดข้อผิดพลาดขึ้น
-- ตัวอย่าง: คอลัมน์ product_name เป็น VARCHAR
SELECT AVG(product_name) FROM products; -- อาจเกิดข้อผิดพลาด
2. การจัดการค่า NULL:
อย่างที่กล่าวไปแล้ว AVG() จะไม่นำค่า NULL มาคำนวณ ถ้าคุณต้องการให้ค่า NULL ถูกพิจารณาเป็น 0 คุณสามารถใช้ฟังก์ชัน IFNULL() เพื่อแทนที่ค่า NULL ด้วย 0 ก่อนที่จะคำนวณค่าเฉลี่ยได้
SELECT AVG(IFNULL(price, 0)) FROM products;
ในตัวอย่างนี้ ถ้าคอลัมน์ price มีค่า NULL ค่าเหล่านั้นจะถูกแทนที่ด้วย 0 ก่อนที่จะคำนวณค่าเฉลี่ย
สรุป
ฟังก์ชัน AVG() เป็นเครื่องมือที่มีประโยชน์ในการหาค่าเฉลี่ยของข้อมูลตัวเลขใน MySQL ช่วยให้เราสามารถวิเคราะห์ข้อมูลและสรุปผลได้อย่างรวดเร็วและแม่นยำ การเข้าใจวิธีการใช้งาน AVG() ร่วมกับ WHERE clause และ GROUP BY clause จะช่วยให้คุณสามารถดึงข้อมูลเชิงลึกจากฐานข้อมูลของคุณได้อย่างมีประสิทธิภาพ
ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับฟังก์ชัน MIN() และ MAX() ซึ่งใช้ในการหาค่าที่น้อยที่สุดและมากที่สุดในคอลัมน์ที่กำหนด รอติดตามกันนะครับ!