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