ฟังก์ชัน Aggregate: สรุปข้อมูลด้วย COUNT, SUM, AVG, MIN, MAX
ในบทที่แล้ว เราได้เรียนรู้วิธีการดึงข้อมูลจาก Table ด้วยคำสั่ง SELECT และการใช้เงื่อนไข WHERE เพื่อกรองข้อมูลที่ต้องการ ในบทนี้ เราจะมาเรียนรู้เกี่ยวกับฟังก์ชัน Aggregate ซึ่งเป็นเครื่องมือที่ทรงพลังในการสรุปและวิเคราะห์ข้อมูลใน Table ของเรา
ฟังก์ชัน Aggregate จะทำการคำนวณบนกลุ่มของแถว (row) และคืนค่าผลลัพธ์เพียงค่าเดียว ตัวอย่างเช่น เราสามารถใช้ฟังก์ชัน Aggregate เพื่อนับจำนวนสินค้าทั้งหมดในคลัง, หาผลรวมของยอดขายทั้งหมด, หรือหาค่าเฉลี่ยของราคาสินค้า
ฟังก์ชัน Aggregate ที่ควรรู้
PostgreSQL มีฟังก์ชัน Aggregate ให้เลือกใช้งานมากมาย แต่ในบทนี้ เราจะเน้นที่ฟังก์ชันพื้นฐานและใช้งานบ่อยที่สุด 5 ฟังก์ชัน:
COUNT: นับจำนวนแถวSUM: หาผลรวมAVG: หาค่าเฉลี่ยMIN: หาค่าต่ำสุดMAX: หาค่าสูงสุด
เราจะมาดูแต่ละฟังก์ชันอย่างละเอียด พร้อมตัวอย่างการใช้งานจริง
ฟังก์ชัน COUNT: นับจำนวนแถว
ฟังก์ชัน COUNT ใช้เพื่อนับจำนวนแถวใน Table หรือจำนวนแถวที่ตรงตามเงื่อนไขที่กำหนด รูปแบบการใช้งานพื้นฐานคือ:
SELECT COUNT(*) FROM table_name;
COUNT(*) จะนับจำนวนแถวทั้งหมดใน table_name ไม่ว่าจะมีค่า NULL หรือไม่ก็ตาม
ตัวอย่าง: สมมติว่าเรามี Table ชื่อ products ที่เก็บข้อมูลสินค้า:
CREATE TABLE products (
product_id SERIAL PRIMARY KEY,
product_name VARCHAR(255),
price DECIMAL(10, 2),
stock_quantity INTEGER
);
INSERT INTO products (product_name, price, stock_quantity) VALUES
('เสื้อยืด', 250.00, 50),
('กางเกงยีนส์', 790.00, 30),
('รองเท้าผ้าใบ', 1200.00, 20),
('หมวกแก๊ป', 150.00, 100),
('ถุงเท้า', 50.00, 200);
หากเราต้องการทราบจำนวนสินค้าทั้งหมดใน Table products เราสามารถใช้คำสั่ง:
SELECT COUNT(*) FROM products;
ผลลัพธ์ที่ได้คือ 5 ซึ่งเป็นจำนวนสินค้าทั้งหมดใน Table
การใช้ COUNT ร่วมกับ WHERE: เราสามารถใช้ COUNT ร่วมกับ WHERE เพื่อนับจำนวนแถวที่ตรงตามเงื่อนไขที่กำหนด
SELECT COUNT(*) FROM products WHERE price > 500.00;
คำสั่งนี้จะนับจำนวนสินค้าที่มีราคามากกว่า 500 บาท ผลลัพธ์ที่ได้คือ 2 (กางเกงยีนส์และรองเท้าผ้าใบ)
COUNT(column_name): หากเราต้องการนับจำนวนค่าที่ไม่ใช่ NULL ใน Column ที่ระบุ เราสามารถใช้ COUNT(column_name) ได้
-- สมมติว่าเราเพิ่ม Column 'discount' ซึ่งอาจมีค่า NULL
ALTER TABLE products ADD COLUMN discount DECIMAL(5,2);
INSERT INTO products (product_name, price, stock_quantity, discount) VALUES
('กระเป๋า', 500.00, 15, 0.10); -- มีส่วนลด
SELECT COUNT(discount) FROM products;
คำสั่งนี้จะนับจำนวนแถวที่มีค่าใน Column discount (ที่ไม่ใช่ NULL) ผลลัพธ์ที่ได้คือ 1 (เนื่องจากมีเพียงกระเป๋าที่มีค่าส่วนลด)
ข้อควรจำ: COUNT(*) นับทุกแถว, COUNT(column_name) นับเฉพาะแถวที่มีค่าที่ไม่ใช่ NULL ใน Column นั้นๆ
ฟังก์ชัน SUM: หาผลรวม
ฟังก์ชัน SUM ใช้เพื่อหาผลรวมของค่าใน Column ที่เป็นตัวเลข รูปแบบการใช้งานคือ:
SELECT SUM(column_name) FROM table_name;
ตัวอย่าง: หากเราต้องการหายอดรวมของราคาสินค้าทั้งหมดใน Table products เราสามารถใช้คำสั่ง:
SELECT SUM(price) FROM products;
ผลลัพธ์ที่ได้คือ 2940.00 ซึ่งเป็นผลรวมของราคาสินค้าทั้งหมด (250 + 790 + 1200 + 150 + 50 + 500)
การใช้ SUM ร่วมกับ WHERE: เราสามารถใช้ SUM ร่วมกับ WHERE เพื่อหาผลรวมของค่าที่ตรงตามเงื่อนไขที่กำหนด
SELECT SUM(price) FROM products WHERE stock_quantity < 50;
คำสั่งนี้จะหายอดรวมของราคาสินค้าที่มีจำนวนในคลังน้อยกว่า 50 ชิ้น ผลลัพธ์ที่ได้คือ 1990.00 (790 + 1200)
ข้อควรจำ: SUM จะคืนค่า NULL หากไม่มีแถวใดๆ ตรงตามเงื่อนไข หรือถ้า Column ที่ระบุมีค่าเป็น NULL ทั้งหมด
ฟังก์ชัน AVG: หาค่าเฉลี่ย
ฟังก์ชัน AVG ใช้เพื่อหาค่าเฉลี่ยของค่าใน Column ที่เป็นตัวเลข รูปแบบการใช้งานคือ:
SELECT AVG(column_name) FROM table_name;
ตัวอย่าง: หากเราต้องการหาราคาเฉลี่ยของสินค้าทั้งหมดใน Table products เราสามารถใช้คำสั่ง:
SELECT AVG(price) FROM products;
ผลลัพธ์ที่ได้คือ 490.00 ซึ่งเป็นราคาเฉลี่ยของสินค้าทั้งหมด (2940 / 6)
การใช้ AVG ร่วมกับ WHERE: เราสามารถใช้ AVG ร่วมกับ WHERE เพื่อหาค่าเฉลี่ยของค่าที่ตรงตามเงื่อนไขที่กำหนด
SELECT AVG(price) FROM products WHERE stock_quantity > 50;
คำสั่งนี้จะหาราคาเฉลี่ยของสินค้าที่มีจำนวนในคลังมากกว่า 50 ชิ้น ผลลัพธ์ที่ได้คือ 100.00 (150 + 50 / 2)
ข้อควรจำ: AVG จะคืนค่า NULL หากไม่มีแถวใดๆ ตรงตามเงื่อนไข หรือถ้า Column ที่ระบุมีค่าเป็น NULL ทั้งหมด
ฟังก์ชัน MIN และ MAX: หาค่าต่ำสุดและค่าสูงสุด
ฟังก์ชัน MIN ใช้เพื่อหาค่าต่ำสุดใน Column ที่ระบุ และฟังก์ชัน MAX ใช้เพื่อหาค่าสูงสุดใน Column ที่ระบุ รูปแบบการใช้งานคือ:
SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;
ตัวอย่าง: หากเราต้องการหาราคาสินค้าที่ถูกที่สุดและแพงที่สุดใน Table products เราสามารถใช้คำสั่ง:
SELECT MIN(price) AS cheapest_price, MAX(price) AS most_expensive_price FROM products;
ผลลัพธ์ที่ได้คือ cheapest_price: 50.00 และ most_expensive_price: 1200.00
การใช้ MIN และ MAX ร่วมกับ WHERE: เราสามารถใช้ MIN และ MAX ร่วมกับ WHERE เพื่อหาค่าต่ำสุดและค่าสูงสุดของค่าที่ตรงตามเงื่อนไขที่กำหนด
SELECT MIN(price) FROM products WHERE product_name LIKE '%เสื้อ%';
คำสั่งนี้จะหาราคาสินค้าที่ถูกที่สุดที่มีคำว่า "เสื้อ" ในชื่อ ผลลัพธ์ที่ได้คือ 250.00
ข้อควรจำ: MIN และ MAX สามารถใช้กับ Column ที่เป็นตัวเลข, ข้อความ, หรือวันที่ได้
สรุป
ในบทนี้ เราได้เรียนรู้เกี่ยวกับฟังก์ชัน Aggregate พื้นฐาน 5 ฟังก์ชัน: COUNT, SUM, AVG, MIN, และ MAX ซึ่งเป็นเครื่องมือที่สำคัญในการสรุปและวิเคราะห์ข้อมูลในฐานข้อมูล PostgreSQL การเข้าใจและใช้งานฟังก์ชันเหล่านี้จะช่วยให้เราสามารถดึงข้อมูลเชิงลึกจากฐานข้อมูลของเราได้อย่างมีประสิทธิภาพ
ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับ JOIN ซึ่งเป็นวิธีการรวมข้อมูลจากหลาย Table เข้าด้วยกัน เพื่อให้เราสามารถสร้างรายงานและวิเคราะห์ข้อมูลที่ซับซ้อนยิ่งขึ้น