Giới hạn kết quả nhóm

Giới thiệu về Oracle SQL

Hadrien Lacroix

Content Developer

Quay lại ví dụ

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         |
| ...             | ...               |

Còn lọc sau khi đã nhóm thì sao?

Giới thiệu về Oracle SQL

Giới hạn của WHERE

  • WHERE không thể lọc theo nhóm
    • Không dùng được hàm nhóm trong mệnh đề WHERE
Giới thiệu về Oracle SQL

Ví dụ về giới hạn của 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
        ^
Giới thiệu về 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 |
| ...         | ...    |
Giới thiệu về Oracle SQL

Giới hạn kết quả nhóm với HAVING

Luồng mệnh đề Having

Giới thiệu về 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 |
| ...         | ...    |

Giới thiệu về Oracle SQL

Ví dụ khác

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 |
| ...           | ...  |
Giới thiệu về Oracle SQL

Hướng dẫn

  • Có thể dùng các hàm nhóm khác nhau trong SELECTHAVING

  • HAVING luôn đi kèm hàm nhóm

Thứ tự xử lý:

  1. Dòng được lọc bởi WHERE, rồi nhóm bởi GROUP BY
  2. Áp dụng hàm nhóm lên các nhóm
  3. Lọc nhóm bằng HAVING, sau đó xuất kết quả
Giới thiệu về Oracle SQL

Ayo berlatih!

Giới thiệu về Oracle SQL

Preparing Video For Download...