Kodokon kodokon.com

การรวมข้อมูล: COUNT, SUM, AVG, MIN/MAX และ GROUP BY

คำนวณผลรวม ค่าเฉลี่ย และสถิติต่อกลุ่มโดยใช้ฟังก์ชันการรวมและ GROUP BY

8 นาที · 3 คำถาม

เปิดบทเรียนนี้ใน Kodokon

ฟังก์ชันการรวม (aggregate function) รับหลายแถวเป็นข้อมูลเข้าและคืน ค่าเพียงค่าเดียว เช่น ผลรวม ค่าเฉลี่ย ค่าต่ำสุด... ตัวที่ง่ายที่สุดคือ COUNT(*) ซึ่งนับจำนวนแถว มันเข้ากันได้อย่างเป็นธรรมชาติกับ WHERE โดยฐานข้อมูลจะกรองก่อน แล้วจึงนับ

SQL
SELECT COUNT(*) FROM books;

SELECT COUNT(*) FROM books WHERE genre = 'sf';
หนังสือทั้งหมด 7 เล่ม ในจำนวนนั้น 4 เล่มเป็นนิยายวิทยาศาสตร์

ฟังก์ชันการรวมที่สำคัญอื่น ๆ จะใช้กับคอลัมน์ SUM(price) บวกรวม AVG(price) คำนวณค่าเฉลี่ย MIN(year) และ MAX(year) หาค่าที่น้อยที่สุดและมากที่สุด ส่วนคำสงวน AS ให้ ชื่อแทน (alias) นั่นคือชื่อที่อ่านง่ายสำหรับคอลัมน์ที่คำนวณได้

SQL
SELECT SUM(price) AS total FROM books;

SELECT AVG(price) AS avg_sf
FROM books
WHERE genre = 'sf';

SELECT MIN(year), MAX(year) FROM books;
ผลรวม: 52.4; ค่าเฉลี่ยของ sf: 8.375; 1888 และ 1965

แล้วถ้าต้องการสถิติ ต่อหมวดหมู่ ล่ะ? นั่นคือหน้าที่ของ GROUP BY ฐานข้อมูลจะจัดกลุ่มแถวที่มีค่าเดียวกัน (ในที่นี้คือ genre) แล้วจึงใช้ฟังก์ชันการรวมกับแต่ละกลุ่ม ผลลัพธ์จะมีหนึ่งแถวต่อหนึ่งกลุ่ม

SQL
SELECT genre, COUNT(*) AS nb
FROM books
GROUP BY genre;

SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;
sf: 4 เล่ม; aventure: 2; conte: 1

ทดสอบความรู้

ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน

  1. SELECT COUNT(*) FROM books; คืนอะไร?
    • จำนวนคอลัมน์ในตาราง
    • จำนวนแถวในตาราง
    • รายชื่อหนังสือทั้งหมด
  2. ฟังก์ชันใดคำนวณราคาเฉลี่ยของหนังสือ?
    • SUM(price)
    • AVG(price)
    • MEAN(price)
    • MAX(price)
  3. SELECT genre, COUNT(*) FROM books GROUP BY genre; ให้ผลลัพธ์อะไร?
    • หนึ่งแถวต่อหนังสือหนึ่งเล่ม พร้อม genre ของมัน
    • แถวเดียวที่มีจำนวนหนังสือทั้งหมด
    • หนึ่งแถวต่อหนึ่ง genre พร้อมจำนวนหนังสือใน genre นั้น