Vấn đề:
Bạn cần tìm các hàng trong đó các nhóm có tổng giá trị trong một cột nhỏ hơn một giá trị nhất định.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng tên là company
với dữ liệu trong các cột sau:id
, department
, first_name
, last_name
và salary
.
id | bộ phậnfirst_name | last_name | lương | |
---|---|---|---|---|
1 | tiếp thị | Lora | Màu nâu | 2300 |
2 | tài chính | John | Jackson | 3200 |
3 | tiếp thị | Michael | Thomson | 1270 |
4 | sản xuất | Tony | Miller | 6500 |
5 | sản xuất | Sally | Màu xanh lá cây | 2500 |
6 | tài chính | Olivier | Đen | 3450 |
7 | sản xuất | Jeniffer | Michelin | 2800 |
8 | tiếp thị | Jeremy | Lorson | 3600 |
9 | tiếp thị | Louis | Smith | 4200 |
Hãy tìm tên của các phòng ban có tổng tiền lương của nhân viên dưới 7000.
Giải pháp:
SELECT department, SUM(salary) FROM company GROUP BY department HAVING SUM(salary)<7000;
Đây là kết quả:
bộ phận | tổng |
---|---|
tài chính | 6550 |
Thảo luận:
Để lọc các bản ghi bằng cách sử dụng hàm tổng hợp (hàm SUM trước đó), hãy sử dụng mệnh đề HAVING. Để tính tổng các giá trị cho mỗi nhóm hàng, hãy sử dụng hàm SUM tổng hợp. Trong truy vấn này, bộ phận cột được tính toán với tổng của tất cả tiền lương của các nhân viên của bộ phận đó dưới dạng một nhóm (tính toán nó bằng hàm SUM với mức lương cột làm đối số). Vì bạn tính toán giá trị cho mỗi nhóm hàng (chúng tôi nhóm các hàng theo tên của bộ phận), truy vấn có mệnh đề GROUP BY với tên của cột để nhóm các hàng (trong ví dụ của chúng tôi, GROUP BY department
). Bước cuối cùng là sử dụng hàm tổng hợp trong mệnh đề HAVING. Hãy nhớ rằng, HAVING nên được đặt sau mệnh đề GROUP BY. HAVING chứa điều kiện so sánh giá trị được trả về bởi hàm tổng hợp với một giá trị nhất định. Từ trên xuống, đó là tổng tiền lương có giá trị nhỏ hơn 7000 (SUM(salary)<7000
). Tại đây, chúng tôi xác minh tổng tiền lương trong mỗi bộ phận thấp hơn 7000. Truy vấn chỉ hiển thị một bộ phận, tài chính, với mức lương là 6550.