การรวมข้อมูล: COUNT, SUM, AVG, MIN/MAX และ GROUP BY
คำนวณผลรวม ค่าเฉลี่ย และสถิติต่อกลุ่มโดยใช้ฟังก์ชันการรวมและ GROUP BY
8 นาที · 3 คำถาม
เปิดบทเรียนนี้ใน Kodokonฟังก์ชันการรวม (aggregate function) รับหลายแถวเป็นข้อมูลเข้าและคืน ค่าเพียงค่าเดียว เช่น ผลรวม ค่าเฉลี่ย ค่าต่ำสุด... ตัวที่ง่ายที่สุดคือ COUNT(*) ซึ่งนับจำนวนแถว มันเข้ากันได้อย่างเป็นธรรมชาติกับ WHERE โดยฐานข้อมูลจะกรองก่อน แล้วจึงนับ
SQLSELECT COUNT(*) FROM books;
SELECT COUNT(*) FROM books WHERE genre = 'sf';
หนังสือทั้งหมด 7 เล่ม ในจำนวนนั้น 4 เล่มเป็นนิยายวิทยาศาสตร์ฟังก์ชันการรวมที่สำคัญอื่น ๆ จะใช้กับคอลัมน์ SUM(price) บวกรวม AVG(price) คำนวณค่าเฉลี่ย MIN(year) และ MAX(year) หาค่าที่น้อยที่สุดและมากที่สุด ส่วนคำสงวน AS ให้ ชื่อแทน (alias) นั่นคือชื่อที่อ่านง่ายสำหรับคอลัมน์ที่คำนวณได้
SQLSELECT 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) แล้วจึงใช้ฟังก์ชันการรวมกับแต่ละกลุ่ม ผลลัพธ์จะมีหนึ่งแถวต่อหนึ่งกลุ่ม
SQLSELECT 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ทดสอบความรู้
ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน
- SELECT COUNT(*) FROM books; คืนอะไร?
- จำนวนคอลัมน์ในตาราง
- จำนวนแถวในตาราง
- รายชื่อหนังสือทั้งหมด
- ฟังก์ชันใดคำนวณราคาเฉลี่ยของหนังสือ?
- SUM(price)
- AVG(price)
- MEAN(price)
- MAX(price)
- SELECT genre, COUNT(*) FROM books GROUP BY genre; ให้ผลลัพธ์อะไร?
- หนึ่งแถวต่อหนังสือหนึ่งเล่ม พร้อม genre ของมัน
- แถวเดียวที่มีจำนวนหนังสือทั้งหมด
- หนึ่งแถวต่อหนึ่ง genre พร้อมจำนวนหนังสือใน genre นั้น