Bài tập

SQL COUNT() với DISTINCT

Huy Erick

SQL COUNT() function kết hợp với DISTINCT clause giúp loại bỏ sự xuất hiện lặp lại của dữ liệu giống nhau. DISTINCT chỉ được sử dụng một lần trong câu lệnh SELECT cụ thể. Cú...

SQL COUNT() function kết hợp với DISTINCT clause giúp loại bỏ sự xuất hiện lặp lại của dữ liệu giống nhau. DISTINCT chỉ được sử dụng một lần trong câu lệnh SELECT cụ thể.

Cú pháp:

COUNT(DISTINCT expr,[expr...]) hoặc SELECT COUNT(DISTINCT expression) FROM table_name WHERE condition;

Ở đây, expression đề cập đến sự kết hợp của cột hoặc một biểu thức cần được đánh giá để thu được các giá trị duy nhất, condition là một tham số tùy chọn.

Ví dụ:

Để lấy số lượng hàng duy nhất từ bảng 'orders' với các điều kiện sau -

  1. chỉ tính các giá trị duy nhất của cust_code,
  2. kết quả sẽ xuất hiện với tiêu đề "Số lượng nhân viên", câu lệnh SQL sau có thể được sử dụng:
  • Đếm số lượng giá trị duy nhất trong cột 'cust_code' của bảng 'orders' - và đặt tên định danh kết quả là "Số lượng nhân viên"
     FROM orders;``` Bảng mẫu: orders Đầu ra:  Số lượng nhân viên - 25

Ví dụ:

Bảng mẫu: product_mast

 -+-+-+-+ 1|Pro1|300|2018| 2|Pro2|400|2019| 3|Pro1|350|2018| 4|Pro3|500|2019| 5|Pro2|450|2018|``` Để đếm số lượng sản phẩm riêng biệt được bán trong năm 2018, chúng ta có thể sử dụng câu truy vấn SQL sau: - Đếm số lượng giá trị duy nhất trong cột 'prod' ```SELECT COUNT(DISTINCT prod) FROM product_mast WHERE year = 2018;``` Đầu ra: count - 2 Điều này sẽ trả về kết quả là 2, vì có hai sản phẩm riêng biệt (Pro1 và Pro2) được bán trong năm 2018.  ##Ví dụ: Bảng mẫu: product_mast ```id|prod|price|year| -+-+-+-+ 1|Pro1|300|2018| 2|Pro2|400|2019| 3|Pro1|350|2018| 4|Pro3|500|2019| 5|Pro2|450|2018|``` Nếu chúng ta muốn đếm số lượng kết hợp sản phẩm và năm riêng biệt, chúng ta có thể sử dụng câu truy vấn SQL sau: - Đếm số lượng kết hợp duy nhất của 'prod' và 'year' trong bảng 'product_mast' ```SELECT COUNT(DISTINCT (prod, year)) FROM product_mast;``` Đầu ra: count - 4 Điều này sẽ trả về kết quả là 4, vì có bốn kết hợp sản phẩm và năm riêng biệt (Pro1-2018, Pro2-2019, Pro2-2018 và Pro3-2019) trong bảng product_mast.  ##Ví dụ: Bảng mẫu: product_mast ```id|prod|price|year| -+-+-+-+ 1|Pro1|300|2018| 2|Pro2|400|2019| 3|Pro1|350|2018| 4|Pro3|500|2019| 5|Pro2|450|2018|``` Để đếm số lượng sản phẩm riêng biệt được bán trong năm 2018 với giá lớn hơn 300, chúng ta có thể sử dụng câu truy vấn SQL sau: - Đếm số lượng giá trị duy nhất trong cột 'prod' ```SELECT COUNT(DISTINCT prod) FROM product_mast WHERE year = 2018 AND price > 300;``` Đầu ra: count - 2 Điều này sẽ trả về kết quả là 2, vì có hai sản phẩm riêng biệt (Pro1 và Pro2) được bán trong năm 2018 với giá lớn hơn 300.  ##Ví dụ: Bảng mẫu: product_mast ```id|prod|price|year| -+-+-+-+ 1|Pro1|300|2018| 2|Pro2|400|2019| 3|Pro1|350|2018| 4|Pro3|500|2019| 5|Pro2|450|2018|``` Nếu chúng ta muốn đếm số lượng kết hợp sản phẩm và năm riêng biệt với giá lớn hơn 400, chúng ta có thể sử dụng câu truy vấn SQL sau: - Đếm số lượng kết hợp duy nhất của 'prod' và 'year' ```SELECT COUNT(DISTINCT (prod, year)) FROM product_mast WHERE price > 400;``` Đầu ra: count - 2 Điều này sẽ trả về kết quả là 2, vì có hai kết hợp sản phẩm và năm riêng biệt (Pro3-2022 và Pro2-2018) trong bảng product_mast với giá lớn hơn 400.  #SQL COUNT() với All  Trong phần sau, chúng ta sẽ thảo luận về việc sử dụng ALL clause với hàm SQL COUNT() để chỉ đếm các giá trị không rỗng cho cột cụ thể trong đối số. Sự khác biệt giữa '*' (asterisk) và ALL là, '*' đếm cả giá trị NULL trong khi ALL chỉ đếm giá trị NON NULL.  ##Ví dụ: Để lấy dữ liệu số lượng mã 'grade' hợp lệ từ bảng 'customer' với điều kiện sau - 1. mỗi khách hàng phải là một mã 'grade' hợp lệ, câu lệnh SQL sau có thể được sử dụng: - Đếm tổng số hàng trong bảng 'customer', - bao gồm các giá trị trùng lặp trong cột 'grade' ```SELECT COUNT(ALL grade) FROM customer;``` Bảng mẫu: customer Đầu ra: COUNT(ALLGRADE) - 25  Lưu ý: Kết quả của câu lệnh SQL được hiển thị ở đây được lấy bằng cách sử dụng Oracle Database 10g Express Edition.  Dưới đây là một bài thuyết trình về tất cả các hàm tổng hợp.  Trước: COUNT Function  Tiếp: COUNT with Group by
1