StepCoding

การกรองกลุ่มที่ต้องการแสดงด้วย HAVING

อ่าน [2204] หมวดหมู่: คำสั่ง SELECT เบื้องต้น

เมื่อเราทำการหาผลสรุปด้วย function ต่าง ๆ เรียบร้อยแล้ว แล้วเราต้องการกรองข้อมูลที่ได้จากฟังก์ชันต่าง ๆ เราจะต้องทำการกำหนดเงื่อนไขโดยการใช้คำสั่ง HAVING ซึ่งจะมีลักษณะเหมือนกับคำสั่ง WHERE แต่จะแตกต่างกันตรงที่

  • การใช้คำสั่ง WHERE จะใช้เพื่อกรองข้อมูลจริง ๆ (ทุกแถว) จากตาราง (table)
  • การใช้คำสั่ง HAVING ใช้เพื่อกรองข้อมูลตามจากข้อมูลที่ได้จากการใช้ฟังก์ชันผลรวมต่าง ๆ ในแต่ละกลุ่ม

ผมจะแสดงตัวอย่างการทำงานของคำสั่ง WHERE, GROUP BY และ HAVING ให้ดูทีละตัวอย่างนะครับดังนี้

การ query ข้อมูลโดยไม่จัดกลุ่ม (ไม่ใช้คำสั่ง GROUP BY) เพื่อกรองข้อมูลจากตารางออกมา
SELECT title, salary FROM personnel WHERE dept_id = 7;
titlesalary
Stock clerk28000.00
Programmer41000.00
Stock clerk29000.00
Programmer48000.00
Secretary33000.00
Accountant40000.00
การเพิ่มคำสั่ง GROUP BY เพื่อใช้ฟังก์ชันหาผลสรุปจำนวนพนักงาน และค่าเฉลี่ยนเงินเดือนของแต่ละตำแหน่ง
SELECT title, COUNT(*), AVG(salary)
FROM personnel WHERE dept_id = 7
GROUP BY title;
titleCOUNT(*)AVG(salary)
Accountant140000.000000
Programmer244500.000000
Secretary133000.000000
Stock clerk228500.000000
ขั้นตอนสุดท้าย การใช้คำสั่ง HAVING เพื่อกำหนดเงื่อนไขของข้อมูลผลสรุป โดยในที่นี้จะตั้งเงื่อนไขว่า แสดงข้อมูลเฉพาะตำแหน่งที่มีพนักงานมากกว่า 1 คน
SELECT title, salary, COUNT(*), AVG(salary)
FROM personnel WHERE dept_id = 7
GROUP BY title
HAVING COUNT(*) > 1;
titlesalaryCOUNT(*)AVG(salary)
Programmer41000.00244500.000000
Stock clerk28000.00228500.000000

ผู้สนับสนุน