ฟังก์ชั่นรวมใน MySQL
ฟังก์ชั่นรวมเป็นเรื่องเกี่ยวกับ
- ทำการคำนวณหลายแถว
- ของคอลัมน์เดียวของตาราง
- และส่งคืนค่าเดียว
มาตรฐาน ISO กำหนดฟังก์ชันรวมห้า (5) รายการ ได้แก่
1) นับ
2) ผลรวม
3) AVG
4) นาที
5) สูงสุด
เหตุใดจึงต้องใช้ฟังก์ชันรวม
จากมุมมองทางธุรกิจ ระดับองค์กรต่างๆ มีข้อกำหนดด้านข้อมูลที่แตกต่างกัน ผู้จัดการระดับสูงมักสนใจที่จะทราบตัวเลขทั้งหมด ไม่จำเป็นต้องทราบรายละเอียดแต่ละรายการ
ฟังก์ชันการรวมช่วยให้เราสร้างข้อมูลสรุปจากฐานข้อมูลได้อย่างง่ายดาย
ตัวอย่างเช่น จากฐานข้อมูล myflix ของเรา ฝ่ายบริหารอาจต้องการรายงานต่อไปนี้
- ภาพยนตร์เช่าน้อยที่สุด
- ภาพยนตร์ที่ถูกเช่ามากที่สุด
- จำนวนเฉลี่ยที่ภาพยนตร์แต่ละเรื่องถูกเช่าในหนึ่งเดือน
เราจัดทำรายงานข้างต้นอย่างง่ายดายโดยใช้ฟังก์ชันรวม
มาดูรายละเอียดฟังก์ชันรวมกันดีกว่า
ฟังก์ชัน COUNT
ฟังก์ชัน COUNT ส่งกลับจำนวนค่าทั้งหมดในฟิลด์ที่ระบุ ใช้ได้กับทั้งชนิดข้อมูลที่เป็นตัวเลขและไม่ใช่ตัวเลข ฟังก์ชันการรวมทั้งหมดตามค่าเริ่มต้นจะไม่รวมค่า Null ก่อนที่จะทำงานกับข้อมูล
COUNT (*) เป็นการใช้งานพิเศษของฟังก์ชัน COUNT ที่ส่งคืนจำนวนแถวทั้งหมดในตารางที่ระบุ COUNT (*) จะพิจารณาด้วย nulls และทำซ้ำ
ตารางด้านล่างนี้แสดงข้อมูลในตารางการเช่าภาพยนตร์
หมายเลขอ้างอิง | ธุรกรรม_วันที่ | กลับ_วันที่ | หมายเลขสมาชิก | movie_id | movie_ กลับมาแล้ว |
---|---|---|---|---|---|
11 | 20-06-2012 | NULL | 1 | 1 | 0 |
12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
15 | 23-06-2012 | NULL | 3 | 3 | 0 |
สมมติว่าเราต้องการได้จำนวนครั้งที่ภาพยนตร์ที่มี id 2 ได้ถูกเช่าไป
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
ดำเนินการค้นหาข้างต้นใน MySQL ปรับแต่ง เมื่อเปรียบเทียบกับ myflixdb เราจะได้ผลลัพธ์ดังต่อไปนี้
COUNT('movie_id') |
---|
3 |
DISTINCT คำสำคัญ
คีย์เวิร์ด DISTINCT ที่ช่วยให้เราสามารถละเว้นคำซ้ำจากผลลัพธ์ของเราได้ ซึ่งสามารถทำได้โดยการจัดกลุ่มค่าที่คล้ายคลึงกันไว้ด้วยกัน
เพื่อชื่นชมแนวคิดของ Distinct ให้เราดำเนินการสืบค้นง่ายๆ
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
ตอนนี้เรามาดำเนินการค้นหาเดียวกันด้วยคำหลักที่แตกต่าง -
SELECT DISTINCT `movie_id` FROM `movierentals`;
ดังที่แสดงด้านล่าง ความแตกต่างจะละเว้นบันทึกที่ซ้ำกันออกจากผลลัพธ์
movie_id |
---|
1 |
2 |
3 |
ฟังก์ชัน MIN
ฟังก์ชัน MIN ส่งกลับค่าที่น้อยที่สุดในเขตข้อมูลตารางที่ระบุ.
ตัวอย่างเช่น สมมติว่าเราต้องการทราบปีที่ภาพยนตร์ที่เก่าแก่ที่สุดในไลบรารีของเราออกฉาย เราสามารถใช้ MySQLฟังก์ชัน MIN เพื่อรับข้อมูลที่ต้องการ
แบบสอบถามต่อไปนี้ช่วยให้เราบรรลุเป้าหมายดังกล่าวได้
SELECT MIN(`year_released`) FROM `movies`;
ดำเนินการค้นหาข้างต้นใน MySQL workbench กับ myflixdb ให้ผลลัพธ์ดังต่อไปนี้
MIN('year_released') |
---|
2005 |
ฟังก์ชั่น MAX
เช่นเดียวกับชื่อที่แนะนำ ฟังก์ชัน MAX จะตรงกันข้ามกับฟังก์ชัน MIN มัน ส่งคืนค่าที่ใหญ่ที่สุดจากฟิลด์ตารางที่ระบุ.
สมมติว่าเราต้องการทราบปีที่ภาพยนตร์ล่าสุดในฐานข้อมูลของเราออกฉาย เราสามารถใช้ฟังก์ชัน MAX เพื่อให้บรรลุเป้าหมายนั้นได้อย่างง่ายดาย
ตัวอย่างต่อไปนี้จะคืนค่าปีที่ออกฉายภาพยนตร์ล่าสุด
SELECT MAX(`year_released`) FROM `movies`;
ดำเนินการค้นหาข้างต้นใน MySQL workbench ที่ใช้ myflixdb ให้ผลลัพธ์ดังต่อไปนี้
MAX('year_released') |
---|
2012 |
ฟังก์ชัน SUM
สมมติว่าเราต้องการรายงานที่แสดงจำนวนเงินทั้งหมดที่ชำระไปแล้ว เราสามารถใช้ MySQL SUM ฟังก์ชั่นซึ่ง ส่งคืนผลรวมของค่าทั้งหมดในคอลัมน์ที่ระบุ. SUM ใช้ได้กับช่องตัวเลขเท่านั้น. ค่า Null จะไม่รวมอยู่ในผลลัพธ์ที่ส่งคืน
ตารางต่อไปนี้แสดงข้อมูลในตารางการชำระเงิน
การชำระเงิน_รหัส | หมายเลขสมาชิก | วันจ่าย | ลักษณะ | จำนวนเงินที่จ่าย | ภายนอก_ อ้างอิง _number |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | การชำระเงินค่าเช่าภาพยนตร์ | 2500 | 11 |
2 | 1 | 25-07-2012 | การชำระเงินค่าเช่าภาพยนตร์ | 2000 | 12 |
3 | 3 | 30-07-2012 | การชำระเงินค่าเช่าภาพยนตร์ | 6000 | NULL |
ข้อความค้นหาที่แสดงด้านล่างจะได้รับการชำระเงินทั้งหมดและสรุปผลรวมเพื่อให้ได้ผลลัพธ์เดียว
SELECT SUM(`amount_paid`) FROM `payments`;
ดำเนินการค้นหาข้างต้นใน MySQL workbench เทียบกับ myflixdb ให้ผลลัพธ์ดังต่อไปนี้
SUM('amount_paid') |
---|
10500 |
AVG ฟังก์ชัน
MySQL AVG ฟังก์ชัน ส่งกลับค่าเฉลี่ยของค่าในคอลัมน์ที่ระบุ- เช่นเดียวกับฟังก์ชัน SUM ใช้งานได้กับประเภทข้อมูลตัวเลขเท่านั้น.
สมมติว่าเราต้องการหาจำนวนเงินที่จ่ายโดยเฉลี่ย เราสามารถใช้แบบสอบถามต่อไปนี้ได้
SELECT AVG(`amount_paid`) FROM `payments`;
ดำเนินการค้นหาข้างต้นใน MySQL workbench ให้ผลลัพธ์ต่อไปนี้แก่เรา
AVG('amount_paid') |
---|
3500 |
ช่วยพัฒนาสมอง
คุณคิดว่าฟังก์ชันการรวมเป็นเรื่องง่าย ลองสิ่งนี้!
ตัวอย่างต่อไปนี้จะจัดกลุ่มสมาชิกตามชื่อ นับจำนวนการชำระเงินทั้งหมด จำนวนเงินชำระเฉลี่ย และยอดรวมของจำนวนเงินชำระ
SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
ดำเนินการตัวอย่างข้างต้นใน MySQL Workbench ให้ผลลัพธ์ต่อไปนี้แก่เรา
สรุป
- MySQL รองรับฟังก์ชันรวมมาตรฐาน ISO ทั้งห้า (5) รายการ COUNT, SUM, AVG, ต่ำสุด และ สูงสุด
- ผลรวมและ AVG ฟังก์ชั่นใช้งานได้กับข้อมูลตัวเลขเท่านั้น
- หากคุณต้องการแยกค่าที่ซ้ำกันออกจากผลลัพธ์ของฟังก์ชันการรวม ให้ใช้คำสำคัญ DISTINCT คีย์เวิร์ด ALL มีการซ้ำกันด้วย หากไม่มีการระบุสิ่งใดเลย ระบบจะถือว่า ALL เป็นค่าเริ่มต้น
- ฟังก์ชันรวมสามารถใช้ร่วมกับส่วนคำสั่ง SQL อื่นๆ เช่น จัดกลุ่มตาม