5.1 มีคำสั่ง

มีตัวดำเนินการที่มีประโยชน์อีกตัวใน SQL ที่ใช้กับGROUP BYมันเรียกHAVINGว่า

WHEREในความ หมายมันมีความคล้ายคลึงกับโอเปอเรเตอร์อย่างสมบูรณ์ WHEREอนุญาตให้คุณตั้งค่าตัวกรองแถวก่อนการจัดกลุ่มเท่านั้น และด้วยความช่วยเหลือ HAVINGคุณสามารถตั้งค่าตัวกรองที่ใช้กับเรกคอร์ดหลังจากการจัดกลุ่ม

มุมมองทั่วไปของคิวรีเมื่อใช้การจัดกลุ่มและการกรองผลลัพธ์การจัดกลุ่มจะเป็นดังนี้:

SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition

HAVINGใช้ได้เฉพาะเมื่อคำขอมีGROUP BY.

ลองเขียนแบบสอบถามโดยแสดงจำนวนพนักงานที่ได้รับการว่าจ้างตามปี

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

และผลลัพธ์ของแบบสอบถามนี้:

จ้าง_ปี ทั้งหมด
2555 1
2556 1
2557 1
2558 2
2561 1

และตอนนี้เราไม่รวมปีที่มีการจ้างพนักงานหนึ่งคนหรือน้อยกว่านั้น ตัวอย่าง:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1

และผลลัพธ์ของแบบสอบถามนี้:

จ้าง_ปี ทั้งหมด
2558 2

5.3 ลำดับการดำเนินการของงบ

ในการเขียนเคียวรี SQL ที่ถูกต้องและมีประสิทธิภาพ คุณต้องเข้าใจวิธีการดำเนินการโดยเซิร์ฟเวอร์ SQL

ขั้นตอนการดำเนินการได้รับการควบคุมอย่างเคร่งครัดและไม่ขึ้นอยู่กับความต้องการของคุณ คุณไม่สามารถจัดเรียงตัวดำเนินการใหม่และรับลำดับอื่นได้

แบบสอบถาม SQL ถูกดำเนินการในหลายขั้นตอนตามลำดับนี้

  1. ด่าน 1 - ดึงแถว
    • ขั้นแรก เลือกแถวทั้งหมดจากตารางที่ระบุ
    • จากนั้นเขตข้อมูลจากการคำนวณจะถูกเพิ่มเข้าไป
    • และจากแถวทั้งหมด เฉพาะแถวที่ตรงตามเงื่อนไขเท่านั้นที่ยังคงอยู่WHERE
  2. ด่าน 2 - การจัดกลุ่ม
    • การจัดกลุ่มจะถูกนำไปใช้กับผลลัพธ์
    • ระหว่างการจัดกลุ่ม ช่องต่างๆCOUNT(*)เช่น
    • HAVINGสุดท้าย ตัวกรองจะถูก นำไปใช้กับผลลัพธ์การจัดกลุ่ม
  3. ขั้นตอนที่ 3 - การเรียงลำดับ
    • แถวที่ได้รับในขั้นตอนก่อนหน้าจะถูกจัดเรียงโดยORDER BYใช้

ในที่สุด ผลลัพธ์สามารถตัดแต่งด้วยLIMITและOFFSET