Sử dụng nhóm theo nhiều cột


1036

Tôi hiểu quan điểm của GROUP BY x

Nhưng làm thế nào để GROUP BY x, ylàm việc, và nó có nghĩa là gì?


2
Bạn sẽ không tìm thấy nó được mô tả như câu hỏi này đặt ra. Mệnh đề GROUP BY có thể lấy một hoặc nhiều trường. NHÓM THEO khách hàng; NHÓM THEO họ, tên; NHÓM THEO năm, cửa hàng, sku, v.v.
Bill

Câu trả lời:


2028

Group By Xcó nghĩa là đặt tất cả những người có cùng giá trị cho X trong một nhóm .

Group By X, Ycó nghĩa là đặt tất cả những người có cùng giá trị cho cả X và Y trong một nhóm .

Để minh họa bằng cách sử dụng một ví dụ, giả sử chúng ta có bảng dưới đây, để làm với ai đang theo học môn gì tại trường đại học:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

Khi bạn chỉ sử dụng một group bycột trên chủ đề; Nói:

select Subject, Count(*)
from Subject_Selection
group by Subject

Bạn sẽ nhận được một cái gì đó như:

Subject    Count
------------------------------
ITB001     5
MKB114     2

... bởi vì có 5 mục cho ITB001 và 2 cho MKB114

Nếu chúng tôi đã đến group byhai cột:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

chúng ta sẽ có được điều này:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

Điều này là do, khi chúng tôi nhóm theo hai cột, có nghĩa là "Nhóm chúng sao cho tất cả những người có cùng Chủ đề và Học kỳ nằm trong cùng một nhóm, sau đó tính toán tất cả các hàm tổng hợp (Đếm, Tổng, Trung bình, v.v. ) cho mỗi nhóm đó " . Trong ví dụ này, điều này được chứng minh bằng thực tế rằng, khi chúng ta đếm chúng, có ba người làm ITB001 trong học kỳ 1 và hai người làm điều đó trong học kỳ 2. Cả hai người làm MKB114 đều ở học kỳ 1, vì vậy không có hàng cho học kỳ 2 (không có dữ liệu phù hợp với nhóm "MKB114, học kỳ 2")

Hy vọng rằng có ý nghĩa.


11
@Smashery: Vì vậy, điều này cũng có nghĩa GROUP BY A,Blà giống như GROUP BY B,A?
tumchaaditya

23
Vâng, nó làm. Tôi không thể nói chắc chắn liệu chúng có hiệu quả như nhau không, nhưng chúng sẽ cho kết quả tương tự, vâng.
Smashery

2
Có thể thêm vào đây rằng có một sự khác biệt giữa GROUP BY a, bGROUP BY a AND bvì cái thứ hai chỉ liệt kê các mục được nhóm với cùng một nội dung và không có "nhóm dưới". Trong trường hợp này, đầu ra sẽ giống như đầu tiên.
Dwza

5
Tôi muốn thêm rằng thứ tự mà bạn nhóm theo các cột không quan trọng. Trong nhóm ví dụ trên theo Học kỳ, Chủ đề sẽ cho kết quả tương tự
user2441441

2
tốt, nhóm theo a, b và nhóm theo b, a KHÔNG trả lại kết quả tương tự - các hàng được hiển thị theo thứ tự khác
fanny

33

Các GROUP BYkhoản được sử dụng cùng với các chức năng tổng hợp để nhóm các kết quả-set bởi một hoặc nhiều cột. ví dụ:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

Ghi nhớ thứ tự này:

1) CHỌN (được sử dụng để chọn dữ liệu từ cơ sở dữ liệu)

2) TỪ (mệnh đề được sử dụng để liệt kê các bảng)

3) WHERE (mệnh đề được sử dụng để lọc các bản ghi)

4) NHÓM THEO (mệnh đề có thể được sử dụng trong câu lệnh CHỌN để thu thập dữ liệu trên nhiều bản ghi và nhóm kết quả theo một hoặc nhiều cột)

5) HAVING (mệnh đề được sử dụng kết hợp với mệnh đề GROUP BY để hạn chế các nhóm hàng trả về chỉ những người có điều kiện là TRUE)

6) ĐẶT HÀNG B (NG (từ khóa được sử dụng để sắp xếp tập kết quả)

Bạn có thể sử dụng tất cả những thứ này nếu bạn đang sử dụng các hàm tổng hợp và đây là thứ tự chúng phải được đặt, nếu không bạn có thể gặp lỗi.

Hàm tổng hợp là:

MIN trả về giá trị nhỏ nhất trong một cột đã cho

SUM trả về tổng của các giá trị số trong một cột đã cho

AVG trả về giá trị trung bình của một cột đã cho

COUNT trả về tổng số giá trị trong một cột đã cho

COUNT (*) trả về số lượng hàng trong bảng


1
nhưng chúng ta đặt 2 cột ở đâu, làm thế nào để tổng hợp dựa trên 2 / nhiều cột là câu hỏi
Chaitanya Bapat

Xin chào Chaitanya, tôi không biết đây có phải là những gì bạn đang hỏi không nhưng hãy để tôi đưa ra một vài ví dụ. Nếu bạn có một bảng sản phẩm, bạn sử dụng các hàm tổng hợp theo cách này, dưới đây là hai trường hợp: CHỌN AVG (instock) TỪ các sản phẩm; Điều này sẽ tính toán các đơn vị trung bình trong kho của bảng sản phẩm. Bây giờ bạn muốn tính toán các đơn vị trong kho theo danh mục sản phẩm, bạn phải sử dụng hàm AVG với mệnh đề GROUP BY như thế này: SELECT categoryId, AVG (instock) TỪ các sản phẩm GROUP BY categoryId;
S. Mayol

Điều này thậm chí không trả lời từ xa câu hỏi ... Câu hỏi ở đây là làm thế nào để đạt được "nhóm xâu chuỗi" của "chủ đề" và "học kỳ" cùng một lúc, như được giải thích trong ví dụ đã cho ...
MahNas92
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.