Có thể có GROUP BY
nhiều hơn một cột trong SELECT
truy vấn MySQL không? Ví dụ:
GROUP BY fV.tier_id AND 'f.form_template_id'
Có thể có GROUP BY
nhiều hơn một cột trong SELECT
truy vấn MySQL không? Ví dụ:
GROUP BY fV.tier_id AND 'f.form_template_id'
Câu trả lời:
GROUP BY col1, col2, col3
Có, bạn có thể nhóm theo nhiều cột. Ví dụ,
SELECT * FROM table
GROUP BY col1, col2
Các kết quả đầu tiên sẽ được nhóm theo col1, sau đó theo col2. Trong MySQL, ưu tiên cột đi từ trái sang phải.
GROUP BY
áp dụng col1+col2
. ví dụ col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2
và chạy GROUP BY col1,col2
sẽ trở lại 1,1|1,3|2,2
trái ngược với 1,1|2,2
đề xuất. Trong khi đó GROUP BY col2, col1
sẽ thay đổi thứ tự tăng dần của col2 trở lại. 1,1|2,2|1,3
Bản trình diễn: sqlfiddle.com/#!9/d5f69/1 Lưu ý rằng id hàng: 2 được trả về trong cả hai trường hợp 2,2
mặc dù đảo ngược các cột.
GROUP BY
). Và nếu trong cột được xác định đầu tiên có kết quả bằng nhau, thì chỉ trong các kết quả bằng nhau được sắp xếp theo cột được xác định thứ hai
SUM
sử dụng với GROUP BY
. Nếu GROUP BY
chỉ bằng một cột, thì SUM
tất cả các giá trị của mỗi giá trị riêng biệt (khác nhau) giá trị cột sqlfiddle.com/#!9/1cbde2/2 . Nếu GROUP BY
hai cột. Sau đó, mysql đầu tiên kiểm tra xem giá trị cột đầu tiên có các giá trị khác nhau trong cột thứ hai không. Nếu có, thì mysql SUM
mỗi giá trị khác nhau của cột thứ hai sqlfiddle.com/#!9/1cbde2/1 .
Có, nhưng việc nhóm theo hai cột có ý nghĩa gì? Chà, giống như việc nhóm theo từng cặp duy nhất trên mỗi hàng. Thứ tự bạn liệt kê các cột thay đổi cách sắp xếp các hàng.
Trong ví dụ của bạn, bạn sẽ viết
GROUP BY fV.tier_id, f.form_template_id
Trong khi đó, mã
GROUP BY f.form_template_id, fV.tier_id
sẽ cho kết quả tương tự, nhưng được sắp xếp khác nhau.
Để sử dụng một ví dụ đơn giản, tôi đã có một bộ đếm cần tóm tắt các địa chỉ IP duy nhất trên mỗi trang được truy cập trên một trang web. Về cơ bản là nhóm theo pagename và sau đó bằng IP. Tôi đã giải quyết nó bằng sự kết hợp của DISTINCT và GROUP BY.
SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
Nếu bạn thích (tôi cần áp dụng nhóm này) theo hai cột cùng một lúc, tôi chỉ thấy điểm này:
SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2
. Các kết quả thường sẽ trông giống như câu trả lời này, nhưng thực thi nội bộ thì hoàn toàn khác.
GROUP BY CONCAT(col1, '_', col2)
GROUP BY col1, col2
. Nó sẽ cho kết quả sai với một số dữ liệu. Nói col1, col2
có giá trị: ('a_b', 'c')
trong một hàng và ('a', 'b_c')
trong một hàng khác. Câu trả lời sai này, với GROUP BY CONCAT sẽ tổng hợp hai hàng thành một. Câu trả lời đúng sẽ không.
SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;