Bạn cần phải cẩn thận khi sử dụng GROUP BY
. Khi bạn hiểu GROUP BY
là gì không, bạn sẽ tự mình biết vấn đề. Nó thực hiện tổng hợp trên dữ liệu của bạn hay nói cách khác, nó giảm dữ liệu của bạn bằng cách thực hiện một số thao tác trên các mục thô và tạo số lượng mục mới giảm dần mà trên đó một số chức năng tổng hợp đã được áp dụng (SUM, COUNT, AVG, v.v.)
Các trường bạn cung cấp trong GROUP BY
mệnh đề đại diện cho mức độ tổng hợp / cuộn lên mà bạn muốn.
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
Ở đây bạn đang cố gắng tổng hợp tại col1
cấp, nghĩa là đối với mọi giá trị riêng biệt có trong cột col1
, sẽ có một số thao tác được thực hiện trên một số cột khác mà bạn cung cấp trong SELECT
mệnh đề (tại đây col2
, col3
) để trong đầu ra bạn có các giá trị không lặp lại trong col1
và một số giá trị cuộn lên của col2
và col3
chống lại từng col1
riêng biệt giá trị dựa trên hàm bạn áp dụng (SUM, COUNT, AVG, v.v.).
Làm thế nào để bạn áp dụng chức năng này? Đó là những gì còn thiếu trong truy vấn ở trên của bạn. Để giải quyết vấn đề này, bạn cần áp dụng một số hàm tổng hợp trên các trường có trong SELECT
nhưng không có trong GROUP BY
mệnh đề. Lấy ví dụ về SUM, hãy thử điều này:
SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
HOẶC để có ý tưởng hay hơn, hãy xóa WHERE
lọc và kiểm tra đầu ra bằng cách chạy:
SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1
Ngoài ra, lý do tại sao truy vấn khác của bạn
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
hoạt động là do bạn không cần áp dụng tổng hợp cho trường (tại đây col2
) có trong GROUP BY
mệnh đề.