2009-12-03 39 views
110

Có thể GROUP BY nhiều hơn một cột trong truy vấn MySQL SELECT không? Ví dụ:Có thể GROUP BY nhiều cột bằng cách sử dụng MySQL không?

GROUP BY fV.tier_id AND 'f.form_template_id' 
+3

Bạn không thể nhóm bởi hàng. Bạn có thể nhóm theo các cột mặc dù –

+12

Vì lợi ích của SEO: tìm kiếm đầu tiên của tôi là cho "nhiều' GROUP BY' MySQL ". –

+8

Đó không phải dành cho SEO, đó là dành cho người dùng. – Buffalo

Trả lời

171
GROUP BY col1, col2, col3 
12
group by fV.tier_id, f.form_template_id 
2
GROUP BY CONCAT(col1, '_', col2) 
+21

Tôi tự hỏi làm thế nào một câu trả lời chỉ với một dòng mã, đăng 4 năm sau khi câu hỏi đã được trả lời được 8 (tám!) Upvotes. Trong khi cũng không chính xác và không hiệu quả bên cạnh muộn và ngắn. –

+3

Ngay cả một con sóc mù cũng nhận được một hạt bây giờ và sau đó ... – thebarless

+5

@ ypercubeᵀᴹ tại sao bạn nói nó không chính xác? Đây chính xác là những gì tôi đang tìm kiếm và giải thích chính xác "nhóm theo nhiều cột". Trong thực tế, tôi không biết tại sao đây không phải là hành vi của "nhóm theo col1, col2" như tôi mong đợi – Abram

49

Có bạn có thể nhóm bởi nhiều cột. Nhưng bạn không thể có được câu trả lời đúng.

select * from table group by col1, col2 

đâu,
        col1 có sở thích đầu tiên nhóm lại và col2 có sở thích thứ hai. Bởi vì mysql cho ưu tiên từ trái sang phải.

+1

Tùy chọn từ trái sang phải được áp dụng cho thứ tự tăng dần của các nhóm và không áp dụng tùy chọn nhóm cột. '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ả về' 1,1 | 1,3 | 2,2' ngược với '1,1 | 2,2' như đã đề xuất. Trong khi 'GROUP BY col2, col1' sẽ thay đổi thứ tự tăng dần của col2. '1,1 | 2,2 | 1,3' Demo: http://sqlfiddle.com/#!9/d5f69/1 Lưu ý rằng id hàng: 2 được trả lại trong cả hai trường hợp cho' 2,2' mặc dù đảo ngược cột. – fyrye

+0

Có, Mysql đã cho chúng tôi kết quả không chính xác –

12

Có, nhưng nhóm có thêm hai cột nghĩa là gì? Vâng, nó giống như nhóm theo từng cặp duy nhất 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 đó, các 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.

2

Để sử dụng ví dụ đơn giản, tôi có một bộ đếm cần thiết để 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. Mà 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 giữa DISTINCT và GROUP BY.

SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC; 
0

Nếu bạn thích (Tôi cần phải áp dụng điều này) nhóm bởi hai cột tại cùng một thời gian, tôi chỉ thấy điểm này:

SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1 
Các vấn đề liên quan