การกรองผลลัพธ์ของกลุ่ม

Oracle SQL เบื้องต้น

Hadrien Lacroix

Content Developer

กลับมาที่ตัวอย่างของเรา

SELECT Composer, AVG(Milliseconds)
FROM Track
WHERE UnitPrice = 0.99
GROUP BY Composer
| Composer        | AVG(Milliseconds) |
|-----------------|-------------------|
| Antonio Vivaldi | 199,086.0         |
| Pearl Jam       | 94,197.0          |
| Jimmy Page      | 474,888.3         |
| Carlos Santana  | 499,234.3         |
| ...             | ...               |

แล้วถ้าต้องการกรองหลังจากจัดกลุ่มแล้วล่ะ?

Oracle SQL เบื้องต้น

ข้อจำกัดของ WHERE

  • WHERE ไม่สามารถใช้กรองกลุ่มได้
    • ฟังก์ชันกลุ่มไม่สามารถใช้ใน WHERE ได้
Oracle SQL เบื้องต้น

ตัวอย่างข้อจำกัดของ WHERE

SELECT Composer, AVG(Milliseconds)
FROM Track
GROUP BY Composer
WHERE AVG(Milliseconds) > 200000
syntax error at or near "WHERE"
LINE 4: WHERE AVG(Milliseconds) > 200000
        ^
Oracle SQL เบื้องต้น

HAVING

SELECT Composer, AVG(Milliseconds)
FROM Track
GROUP BY Composer
HAVING AVG(Milliseconds) > 200000
| composer    | avg    |
|-------------|--------|
| George Duke | 274155 |
| Miles Davis | 391146 |
| R. Carless  | 251585 |
| ...         | ...    |
Oracle SQL เบื้องต้น

การกรองผลลัพธ์กลุ่มด้วย HAVING

การทำงานของ HAVING clause

Oracle SQL เบื้องต้น

HAVING

SELECT Composer, MAX(Milliseconds)
FROM Track
GROUP BY Composer
HAVING MAX(Milliseconds) > 200000
| composer    | max    |
|-------------|--------|
| George Duke | 274155 |
| Miles Davis | 907520 |
| R. Carless  | 251585 |
| ...         | ...    |

Oracle SQL เบื้องต้น

ตัวอย่างเพิ่มเติม

SELECT Composer, SUM(UnitPrice)
FROM Track
WHERE GenreId = 1
GROUP BY Composer
HAVING COUNT(*) > 4
| composer      | sum  |
|---------------|------|
| AC/DC         | 7.92 |
| Chris Cornell | 9.90 |
| Eddie Vedder  | 8.91 |
| ...           | ...  |
Oracle SQL เบื้องต้น

แนวทางปฏิบัติ

  • ใช้ฟังก์ชันกลุ่มต่างกันใน SELECT และ HAVING ได้

  • HAVING ต้องมีฟังก์ชันกลุ่มเสมอ

ลำดับการทำงาน:

  1. กรองแถวด้วย WHERE แล้วจัดกลุ่มด้วย GROUP BY
  2. ฟังก์ชันกลุ่มถูกนำไปใช้กับแต่ละกลุ่ม
  3. กรองกลุ่มด้วย HAVING แล้วแสดงผลลัพธ์
Oracle SQL เบื้องต้น

มาฝึกกันเถอะ!

Oracle SQL เบื้องต้น

Preparing Video For Download...