เมื่อทำงานกับฐานข้อมูล MySQL คุณมักจะมีอินสแตนซ์ที่คุณต้องการกรองค่าต่างๆ แม้ว่าคุณจะสามารถใช้ส่วนคำสั่ง WHERE ได้ แต่ก็ใช้ไม่ได้กับทุกกรณี ส่วนคำสั่ง HAVING จะใช้เมื่อคุณต้องการดำเนินการค้นหาตัวกรองโดยใช้ฟังก์ชันรวมและใช้การจัดกลุ่ม
ส่วนคำสั่ง HAVING ขึ้นอยู่กับส่วนคำสั่ง GROUP BY ในตัวกรองและดำเนินการค้นหาตามเงื่อนไขที่ให้มา โดยจะจำกัดตัวกรองตามเงื่อนไขและส่งกลับเฉพาะกลุ่มที่เลือกหากตรงตามเงื่อนไข เรามีตัวอย่างการใช้ MySQL HAVING clause ที่ผลรวมเกินเกณฑ์ ด้วยวิธีนี้ คุณจะเชี่ยวชาญวิธีใช้ในตอนท้ายของโพสต์ของวันนี้
วิธีการใช้คำสั่ง HAVING ของ MySQL โดยที่ผลรวมมากกว่าเกณฑ์
คุณใช้ส่วนคำสั่ง MySQL HAVING กับส่วนคำสั่ง GROUP BY ไวยากรณ์เป็นดังนี้:
เลือก expression1, .. expression_n, aggregate_func (นิพจน์) จาก table_name จัดกลุ่มตามนิพจน์ HAVING
คุณสามารถใช้ฟังก์ชันรวมต่างๆ ได้ เช่น SUM(), COUNT(), MIN(), MAX() และ AVG() โปรดทราบว่านิพจน์ใดๆ ที่ไม่ได้ใช้กับฟังก์ชันการรวมจะต้องระบุด้วย GROUP BY clause
สำหรับเงื่อนไขนั้น จะใช้กับผลลัพธ์รวมที่คุณระบุเกณฑ์ที่คุณต้องการตรวจสอบกับเงื่อนไข ตัวอย่างเช่น คุณสามารถใช้ฟังก์ชัน SUM() และตรวจสอบว่านิพจน์ตรงตามเกณฑ์ 10 หรือไม่ เราจะทำความเข้าใจเพิ่มเติมเกี่ยวกับสิ่งนี้ในตัวอย่างที่ให้มา
เพื่อทำความเข้าใจว่า HAVING clause ทำงานอย่างไร มาสร้างฐานข้อมูลตัวอย่างที่เราจะทำงานร่วมกัน เราตั้งชื่อฐานข้อมูลของเราว่า “register”
เรามาสร้างตารางชื่อ “คนงาน” เพื่อบรรจุคอลัมน์และประเภทข้อมูลต่างๆ ของเรา ที่นี่ เราทำงานกับข้อมูลของพนักงาน เช่น ชื่อ ชั่วโมง วันทำงาน ฯลฯ
ด้วยการตรวจสอบคำอธิบายของตาราง เราสามารถยืนยันได้ว่าสร้างคอลัมน์ทั้งหมดสำเร็จแล้ว
เราใส่ค่าลงในตารางของเรา เรามีคนงานที่แตกต่างกันซึ่งทำงานในชั่วโมงและวันที่แตกต่างกัน การใช้ข้อมูลนี้ เราสามารถใช้คำสั่ง HAVING โดยที่ผลรวมเกินเกณฑ์
สำหรับตัวอย่างแรก ลองพิจารณากรณีที่เราต้องการหาพนักงานที่ทำงานนานที่สุด สำหรับประโยค HAVING ให้รวมฟังก์ชันรวมผลรวมเป็นชั่วโมง ใน GROUP BY clause เราจัดกลุ่มแถวโดยใช้แถวชื่อเพื่อช่วยจำแนกพนักงานที่มีชั่วโมงรวมมากกว่าเกณฑ์
หากเรามีเกณฑ์สำหรับชั่วโมงทั้งหมดเป็น 7 เราจะดำเนินการคำสั่งของเราดังนี้:
เลือกชื่อ, SUM(ชั่วโมง) AS total_hours_per_person จากคนงาน จัดกลุ่มตามชื่อ มีผลรวม(ชั่วโมง) > 7;โดยการดำเนินการคำสั่ง เราได้รับเอาต์พุตที่มีสองแถว เนื่องจากมีเพียงคนงานสองคนเท่านั้นที่เกินขีดจำกัดที่ระบุไว้ในส่วนคำสั่ง HAVING
สมมติว่าเราต้องการจัดประเภทแผนกเพื่อดูแผนกที่มีพนักงานที่ทำงานในชั่วโมงที่มากกว่าเกณฑ์ 7 ชั่วโมง เราเลือกแผนก จากนั้นใช้ฟังก์ชันการรวม SUM กับชั่วโมงและจัดกลุ่มแถวโดยใช้นิพจน์แผนก
คำสั่งของเรามีดังนี้:
เลือกแผนก, SUM(ชั่วโมง) AS total_hours_per_department จากคนงาน จัดกลุ่มตามแผนกที่มีผลรวม(ชั่วโมง) > 7;จากผลลัพธ์ เราสามารถยืนยันได้ว่าเราสามารถกรองแถวให้เหลือเฉพาะแถวที่มีผลรวมของชั่วโมงมากกว่าเกณฑ์ของเรา
ในทำนองเดียวกัน หากเราต้องการกรองวันที่ทำงานด้วยจำนวนผู้ปฏิบัติงานสูงสุดที่เกินเกณฑ์ 10 ชั่วโมง เราเลือกนิพจน์วันที่ทำงาน จากนั้น เราใช้ฟังก์ชัน SUM กับชั่วโมงและจัดกลุ่มแถวโดยใช้วันที่ทำงาน
คำสั่งมีดังนี้:
เลือกวันทำงาน, SUM(ชั่วโมง) AS maximum_hours_worked จากคนงาน จัดกลุ่มตามวันทำงานโดยมีผลรวม(ชั่วโมง) > 10;หลังจากดำเนินการคำสั่ง ผลลัพธ์แสดงว่ามีเพียงหนึ่งวันทำงานเท่านั้นที่มีผลรวมของชั่วโมงทั้งหมดที่เกินขีดจำกัด:
บทสรุป
ส่วนคำสั่ง MySQL HAVING จะใช้เมื่อคุณต้องการเรียกใช้ตัวกรองแบบสอบถามโดยใช้ฟังก์ชันรวม มันถูกรวมเข้ากับ GROUP BY clause เพื่อดำเนินการค้นหาที่เฉพาะเจาะจงมากขึ้น โพสต์นี้ให้รายละเอียดทุกอย่างเกี่ยวกับ MySQL HAVING clause ที่ผลรวมมากกว่าเกณฑ์ ด้วยตัวอย่างที่ให้มา ตอนนี้คุณเข้าใจวิธีการทำงานกับ MySQL HAVING clause