Vấn đề:
Bạn muốn nhóm dữ liệu của mình theo hai cột để có thể đếm một số thống kê.
Ví dụ:
Trong order
bảng, bạn có các cột order_date
, product_id
, customer_id
và number
. Bạn muốn đếm số lượng sản phẩm được mua bởi mỗi khách hàng mỗi ngày.
order
bảng trông như thế này:
order_date | product_id | customer_id | number |
---|---|---|---|
2020-11-25 | 7 | 1 | 1 |
2020-11-25 | 12 | 1 | 3 |
2020-11-26 | 53 | 1 | 2 |
2020-11-26 | 1 | 2 | 4 |
2020-11-26 | 3 | 2 | 1 |
2020-11-26 | 16 | 2 | 7 |
2020-11-26 | 3 | 3 | 2 |
2020-11-27 | 6 | 3 | 1 |
Giải pháp:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Kết quả là:
order_date | customer_id | products_number |
---|---|---|
2020-11-26 | 3 | 2 |
2020-11-27 | 3 | 1 |
2020-11-26 | 2 | 12 |
2020-11-25 | 1 | 4 |
2020-11-26 | 1 | 2 |
Thảo luận:
Để nhóm theo hai cột, chỉ cần sử dụng GROUP BY
với hai cột. Tên cột phải được liệt kê sau GROUP BY
từ khóa và được phân tách bằng dấu phẩy. Các nhóm sẽ được tạo dựa trên giá trị của cả hai cột; đối với mỗi cặp giá trị, một nhóm riêng biệt được tạo (ví dụ:('2020-11-25', 1)
). Nhìn vào bảng dưới đây, mỗi nhóm được trình bày bằng một màu khác nhau:
order_date | customer_id | product_id | number |
---|---|---|---|
2020-11-25 | 1 | 7 | 1 |
2020-11-25 | 1 | 12 | 3 |
2020-11-26 | 1 | 53 | 2 |
2020-11-26 | 2 | 1 | 4 |
2020-11-26 | 2 | 3 | 1 |
2020-11-26 | 2 | 16 | 7 |
2020-11-26 | 3 | 3 | 2 |
2020-11-27 | 3 | 6 | 1 |
Nếu một hoặc cả hai cột có NULL
giá trị, các giá trị này được coi là một nhóm riêng biệt (ví dụ:('2020-11-26', NULL)
, (NULL, 5)
hoặc (NULL, NULL)
).
Mặt khác, nếu có NULL
trong cột mà chúng tôi áp dụng hàm tổng hợp, NULL
các giá trị chỉ bị bỏ qua. (Trong ví dụ này, hàm tổng hợp là SUM()
và cột là number
). Nếu chúng tôi có các giá trị số 2 , 1 và NULL cho một trong các nhóm, SUM(number)
sẽ bằng 3
(2
và 1
được thêm vào cùng nhau và NULL
bị bỏ qua.)
Tương tự, bạn có thể nhóm theo bất kỳ số lượng cột nào - chỉ cần viết tên cột trong GROUP BY
mệnh đề và ngăn cách chúng bằng dấu phẩy.