SELECT – GROUP BY- Transact-SQL

Bạn đang xem: nhóm người dùng theo sql

SELECT – GROUP BY- Transact-SQL

Trang này có hữu ích không?

Bất kỳ phản hồi bổ sung?

Phản hồi sẽ được gửi đến Microsoft: Bằng cách nhấn nút gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Chính sách quyền riêng tư.

Cảm ơn bạn.

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng (PDW)

Mệnh đề câu lệnh SELECT chia kết quả truy vấn thành các nhóm hàng, thường nhằm mục đích thực hiện một hoặc nhiều tổng hợp trên mỗi nhóm. Câu lệnh SELECT trả về một hàng cho mỗi nhóm.

Cú pháp

Quy ước cú pháp Transact-SQL (Giao dịch-SQL)

  - Cú pháp cho SQL Server và Azure SQL Database
- Cú pháp tuân thủ ISO
  
NHÓM THEO {
      biểu thức cột
    | ROLLUP (& lt; group_by_expression & gt; [, ... n])
    | CUBE (& lt; group_by_expression & gt; [, ... n])
    | TẬP HỢP NHÓM (& lt; grouping_set & gt; [, ... n])
    | () - tính tổng tổng
} [ ,...N ]
 
& lt; group_by_expression & gt; :: =
      biểu thức cột
    | (biểu thức cột [, ... n])
   
& lt; grouping_set & gt; :: =
      () - tính tổng tổng
    | & lt; grouping_set_item & gt;
    | (& lt; grouping_set_item & gt; [, ... n])
  
& lt; grouping_set_item & gt; :: =
      & lt; group_by_expression & gt;
    | ROLLUP (& lt; group_by_expression & gt; [, ... n])
    | CUBE (& lt; group_by_expression & gt; [, ... n])
  

- Chỉ dành cho khả năng tương thích ngược.
- Cú pháp không tuân thủ ISO cho SQL Server và cơ sở dữ liệu Azure SQL
  
NHÓM THEO {
       TẤT CẢ biểu thức cột [, ... n]
    | biểu thức cột [, ... n] VỚI {CUBE | ROLLUP}
       }

 
  - Cú pháp cho Azure Synapse Analytics
  
NHÓM THEO {
      tên-cột [VỚI (DISTRIBUTED_AGG)]
    | biểu thức cột
    | ROLLUP (& lt; group_by_expression & gt; [, ... n])
} [ ,...N ]

 
  - Cú pháp cho Kho Dữ liệu Song song
  
NHÓM THEO {
      tên-cột [VỚI (DISTRIBUTED_AGG)]
    | biểu thức cột
} [ ,...N ]

 

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Đối số

biểu thức cột

Chỉ định một cột hoặc một phép tính không tổng hợp trên một cột. Cột này có thể thuộc về một bảng, bảng dẫn xuất hoặc dạng xem. Cột phải xuất hiện trong mệnh đề FROM của câu lệnh SELECT, nhưng không bắt buộc phải xuất hiện trong danh sách CHỌN.

Để biết các biểu thức hợp lệ, hãy xem biểu thức .

Cột phải xuất hiện trong mệnh đề FROM của câu lệnh SELECT, nhưng không bắt buộc phải xuất hiện trong danh sách SELECT. Tuy nhiên, mỗi bảng hoặc cột chế độ xem trong bất kỳ biểu thức tổng hợp nào trong & lt; select & gt; danh sách phải được đưa vào danh sách GROUP BY:

Các báo cáo sau được phép:

  CHỌN CộtA, CộtB TỪ NHÓM T THEO CộtA, CộtB;
CHỌN CộtA + CộtB TỪ NHÓM T THEO CộtA, CộtB;
CHỌN CộtA + CộtB TỪ NHÓM T BẰNG CộtA + CộtB;
CHỌN CộtA + CộtB + hằng số TỪ NHÓM T THEO CộtA, CộtB;
 

Không được phép sử dụng các câu lệnh sau:

  CHỌN CộtA, CộtB TỪ NHÓM T THEO CộtA + CộtB;
CHỌN CộtA + hằng số + CộtB TỪ NHÓM T BẰNG CộtA + CộtB;
 

Biểu thức cột không được chứa:

  • Bí danh cột được xác định trong danh sách CHỌN. Nó có thể sử dụng bí danh cột cho bảng dẫn xuất được xác định trong mệnh đề FROM.
  • Một cột thuộc loại văn bản , ntext hoặc hình ảnh. Tuy nhiên, bạn có thể sử dụng một cột văn bản, văn bản hoặc hình ảnh làm đối số cho một hàm trả về giá trị của kiểu dữ liệu hợp lệ. Ví dụ, biểu thức có thể sử dụng SUBSTRING () và CAST (). Điều này cũng áp dụng cho các biểu thức trong mệnh đề HAVING.
  • các phương thức kiểu dữ liệu xml. Nó có thể bao gồm một hàm do người dùng định nghĩa sử dụng các phương thức kiểu dữ liệu xml. Nó có thể bao gồm một cột được tính toán sử dụng các phương thức kiểu dữ liệu xml.
  • Một truy vấn con. Lỗi 144 được trả về.
  • Một cột từ chế độ xem được lập chỉ mục.

GROUP BY column-expression [, … n]

Nhóm các kết quả của câu lệnh SELECT theo các giá trị trong danh sách một hoặc nhiều biểu thức cột.

Ví dụ: truy vấn này tạo một bảng Bán hàng với các cột Quốc gia, Khu vực và Bán hàng. Nó chèn bốn hàng và hai trong số các hàng có giá trị phù hợp với Quốc gia và Khu vực.

  TẠO BẢNG Bán hàng (Quốc gia VARCHAR (50), VARCHAR Khu vực (50), INT bán hàng);

CHÈN VÀO GIÁ TRỊ bán hàng (N'Canada ', N'Alberta', 100);
CHÈN VÀO GIÁ TRỊ bán hàng (N'Canada ', N'British Columbia', 200);
CHÈN VÀO GIÁ TRỊ bán hàng (N'Canada ', N'British Columbia', 300);
CHÈN VÀO GIÁ TRỊ bán hàng (N'United States ', N'Montana', 100);
 

Bảng Bán hàng chứa các hàng sau:

Quốc gia
Vùng đất
Bán hàng

Canada
Alberta
100

Canada
British Columbia
200

Canada
British Columbia
300

Hoa Kỳ
Montana
100

Truy vấn tiếp theo này nhóm Quốc gia và Khu vực và trả về tổng cộng cho từng kết hợp giá trị.

  CHỌN Quốc gia, Khu vực, SUM (doanh số) AS TotalSales
TỪ Bán hàng
NHÓM THEO Quốc gia, Khu vực;
 

Kết quả truy vấn có 3 hàng vì có 3 kết hợp giá trị cho Quốc gia và Khu vực. TotalSales cho Canada và British Columbia là tổng của hai hàng.

Quốc gia
Vùng đất
TotalSales

Canada
Alberta
100

Canada
British Columbia
500

Hoa Kỳ
Montana
100

GROUP BY ROLLUP

Tạo một nhóm cho mỗi tổ hợp các biểu thức cột. Ngoài ra, nó “cuộn” kết quả thành tổng phụ và tổng lớn. Để làm điều này, nó di chuyển từ phải sang trái làm giảm số lượng biểu thức cột mà nó tạo ra các nhóm và (các) tổng hợp.

Thứ tự cột ảnh hưởng đến đầu ra ROLLUP và có thể ảnh hưởng đến số hàng trong tập kết quả.

Ví dụ: GROUP BY ROLLUP (col1, col2, col3, col4) tạo các nhóm cho mỗi tổ hợp biểu thức cột trong danh sách sau.

  • col1, col2, col3, col4
  • col1, col2, col3, NULL
  • col1, col2, NULL, NULL
  • col1, NULL, NULL, NULL
  • NULL, NULL, NULL, NULL –Đây là tổng số
Xem Thêm  C ++ If ... else (Với Ví dụ) - nếu khác nếu khác ví dụ

Sử dụng bảng từ ví dụ trước, mã này chạy hoạt động GROUP BY ROLLUP thay vì GROUP BY đơn giản.

  CHỌN Quốc gia, Khu vực, SUM (Doanh số) AS TotalSales
TỪ Bán hàng
GROUP BY ROLLUP (Quốc gia, Khu vực);
 

Kết quả truy vấn có các tổng hợp giống như GROUP BY đơn giản mà không có ROLLUP. Ngoài ra, nó tạo ra tổng phụ cho mỗi giá trị của Quốc gia. Cuối cùng, nó cho tổng số lớn cho tất cả các hàng. Kết quả trông như thế này:

Quốc gia
Vùng đất
TotalSales

Canada
Alberta
100

Canada
British Columbia
500

Canada
VÔ GIÁ TRỊ
600

Hoa Kỳ
Montana
100

Hoa Kỳ
VÔ GIÁ TRỊ
100

VÔ GIÁ TRỊ
VÔ GIÁ TRỊ
700

GROUP BY CUBE ()

GROUP BY CUBE tạo nhóm cho tất cả các kết hợp cột có thể có. Đối với GROUP BY CUBE (a, b), kết quả có các nhóm cho các giá trị duy nhất là (a, b), (NULL, b), (a, NULL) và (NULL, NULL).

Sử dụng bảng từ các ví dụ trước, mã này chạy hoạt động GROUP BY CUBE trên Quốc gia và Khu vực.

  CHỌN Quốc gia, Khu vực, SUM (Doanh số) AS TotalSales
TỪ Bán hàng
GROUP BY CUBE (Quốc gia, Khu vực);
 

Kết quả truy vấn có các nhóm cho các giá trị duy nhất là (Quốc gia, Khu vực), (NULL, Khu vực), (Quốc gia, NULL) và (NULL, NULL). Kết quả như sau:

Quốc gia
Vùng đất
TotalSales

Canada
Alberta
100

VÔ GIÁ TRỊ
Alberta
100

Canada
British Columbia
500

VÔ GIÁ TRỊ
British Columbia
500

Hoa Kỳ
Montana
100

VÔ GIÁ TRỊ
Montana
100

VÔ GIÁ TRỊ
VÔ GIÁ TRỊ
700

Canada
VÔ GIÁ TRỊ
600

Hoa Kỳ
VÔ GIÁ TRỊ
100

GROUP BY GROUPING SETS ()

Tùy chọn GROUPING SETS cung cấp cho bạn khả năng kết hợp nhiều mệnh đề GROUP BY thành một mệnh đề GROUP BY. Kết quả tương đương với ĐOÀN KẾT TẤT CẢ các nhóm được chỉ định.

Ví dụ: GROUP BY ROLLUP (Quốc gia, Khu vực) GROUP BY GROUPING SETS (ROLLUP (Quốc gia, Khu vực)) trả về cùng một kết quả.

Khi TẬP HỢP NHÓM có hai hoặc nhiều phần tử, kết quả là sự kết hợp của các phần tử. Ví dụ này trả về sự kết hợp của các kết quả ROLLUP và CUBE cho Quốc gia và Khu vực.

 CHỌN Quốc gia, Khu vực, SUM (Doanh số) AS TotalSales
TỪ Bán hàng
NHÓM THEO BỘ NHÓM (ROLLUP (Quốc gia, Khu vực), CUBE (Quốc gia, Khu vực));
 

Các kết quả giống như truy vấn này trả về sự kết hợp của hai câu lệnh GROUP BY.

  CHỌN Quốc gia, Khu vực, SUM (Doanh số) AS TotalSales
TỪ Bán hàng
NHÓM THEO ROLLUP (Quốc gia, Khu vực)
ĐOÀN KẾT TẤT CẢ
CHỌN Quốc gia, Khu vực, SUM (Doanh số) AS TotalSales
TỪ Bán hàng
GROUP BY CUBE (Quốc gia, Khu vực);
 

SQL không hợp nhất các nhóm trùng lặp được tạo cho danh sách BỘ NHÓM. Ví dụ: trong GROUP BY ((), CUBE (Country, Region)) , cả hai phần tử đều trả về một hàng cho tổng số và cả hai hàng sẽ được liệt kê trong kết quả.

GROUP BY ()

Chỉ định nhóm trống tạo ra tổng số. Điều này hữu ích như một trong những yếu tố của TẬP HỢP NHÓM. Ví dụ: tuyên bố này cung cấp tổng doanh số cho mỗi quốc gia và sau đó đưa ra tổng doanh số cho tất cả các quốc gia.

  CHỌN Quốc gia, SUM (Doanh số) AS TotalSales
TỪ Bán hàng
GROUP BY GROUPING SETS (Quốc gia, ());
 

NHÓM THEO TẤT CẢ biểu thức cột [, … n]

Áp dụng cho: SQL Server và Azure SQL Database

Lưu ý

Cú pháp này chỉ được cung cấp cho khả năng tương thích ngược. Nó sẽ bị loại bỏ trong một phiên bản trong tương lai. Tránh sử dụng cú pháp này trong công việc phát triển mới và có kế hoạch sửa đổi các ứng dụng hiện đang sử dụng cú pháp này.

Chỉ định bao gồm tất cả các nhóm trong kết quả bất kể chúng có đáp ứng tiêu chí tìm kiếm trong mệnh đề WHERE hay không. Các nhóm không đáp ứng tiêu chí tìm kiếm có NULL cho tổng hợp.

NHÓM THEO TẤT CẢ:

  • Không được hỗ trợ trong các truy vấn truy cập bảng từ xa nếu cũng có mệnh đề WHERE trong truy vấn.
  • Sẽ không thành công trên các cột có thuộc tính FILESTREAM.

GROUP BY column-expression [, … n] WITH {CUBE | ROLLUP}

Áp dụng cho: SQL Server và Azure SQL Database

Lưu ý

Cú pháp này chỉ được cung cấp cho khả năng tương thích ngược. Tránh sử dụng cú pháp này trong công việc phát triển mới và có kế hoạch sửa đổi các ứng dụng hiện đang sử dụng cú pháp này.

VỚI (DISTRIBUTED_AGG)

Áp dụng cho: Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW)

Gợi ý truy vấn DISTRIBUTED_AGG buộc hệ thống xử lý song song (MPP) hàng loạt phân phối lại bảng trên một cột cụ thể trước khi thực hiện tổng hợp. Chỉ một cột trong mệnh đề GROUP BY có thể có gợi ý truy vấn DISTRIBUTED_AGG. Sau khi truy vấn kết thúc, bảng được phân phối lại sẽ bị xóa. Bảng gốc không được thay đổi.

LƯU Ý: Gợi ý truy vấn DISTRIBUTED_AGG được cung cấp để tương thích ngược với các phiên bản Hệ thống nền tảng Analytics (PDW) trước đó và sẽ không cải thiện hiệu suất cho hầu hết các truy vấn. Theo mặc định, MPP đã phân phối lại dữ liệu khi cần thiết để cải thiện hiệu suất cho các tổng hợp.

Nhận xét chung

Cách GROUP BY tương tác với câu lệnh SELECT

CHỌN danh sách:

  • Tập hợp vectơ. Nếu các hàm tổng hợp được bao gồm trong danh sách CHỌN, GROUP BY sẽ tính giá trị tóm tắt cho mỗi nhóm. Chúng được gọi là tập hợp vectơ.
  • Các tổng hợp riêng biệt. Các tổng hợp AVG (DISTINCT column_name), COUNT (DISTINCT column_name) và SUM (DISTINCT column_name) được hỗ trợ với ROLLUP, CUBE và GROUPING SETS.
Xem Thêm  Phương thức chuỗi JavaScript - hàm văn bản trong javascript

Mệnh đề WHERE:

  • SQL loại bỏ các Hàng không đáp ứng các điều kiện trong mệnh đề WHERE trước khi bất kỳ hoạt động nhóm nào được thực hiện.

Điều khoản CÓ:

  • SQL sử dụng mệnh đề có để lọc các nhóm trong tập kết quả.

Mệnh đề ORDER BY:

  • Sử dụng mệnh đề ORDER BY để sắp xếp tập hợp kết quả. Mệnh đề GROUP BY không sắp xếp tập kết quả.

Giá trị NULL:

  • Nếu một cột nhóm chứa các giá trị NULL, thì tất cả các giá trị NULL được coi là bằng nhau và chúng được tập hợp vào một nhóm duy nhất.

Hạn chế và Hạn chế

Áp dụng cho: SQL Server (bắt đầu từ 2008) và Azure Synapse Analytics

Dung lượng tối đa

Đối với mệnh đề GROUP BY sử dụng ROLLUP, CUBE hoặc GROUPING SETS, số biểu thức tối đa là 32. Số nhóm tối đa là 4096 (212). Các ví dụ sau không thành công vì mệnh đề GROUP BY có hơn 4096 nhóm.

  • Ví dụ sau tạo tập hợp nhóm 4097 (212 + 1) và sẽ không thành công.

      NHÓM THEO TẬP HỢP NHÓM (CUBE (a1, ..., a12), b)
     
  • Ví dụ sau tạo 4097 (212 + 1) nhóm và sẽ không thành công. Cả CUBE () () tập hợp nhóm tạo ra tổng số hàng lớn và các tập hợp nhóm trùng lặp không bị loại bỏ.

      NHÓM THEO TẬP HỢP NHÓM (CUBE (a1, ..., a12), ())
     
  • Ví dụ này sử dụng cú pháp tương thích ngược. Nó tạo ra 8192 (213) bộ nhóm và sẽ không thành công.

      GROUP BY CUBE (a1, ..., a13)
    NHÓM THEO a1, ..., a13 VỚI CUBE
     

    Đối với các mệnh đề GROUP BY tương thích ngược không chứa CUBE hoặc ROLLUP, số lượng nhóm theo mục bị giới hạn bởi kích thước cột GROUP BY, các cột tổng hợp và giá trị tổng hợp liên quan đến truy vấn. Giới hạn này bắt nguồn từ giới hạn 8.060 byte trên bảng làm việc trung gian cần thiết để lưu giữ các kết quả truy vấn trung gian. Cho phép tối đa 12 biểu thức nhóm khi CUBE hoặc ROLLUP được chỉ định.

Hỗ trợ cho các tính năng của ISO và ANSI SQL-2006 GROUP BY

Mệnh đề GROUP BY hỗ trợ tất cả các tính năng GROUP BY có trong tiêu chuẩn SQL-2006 với các ngoại lệ cú pháp sau:

  • Các tập hợp nhóm không được phép trong mệnh đề GROUP BY trừ khi chúng là một phần của danh sách CÁC TẬP HỢP NHÓM rõ ràng. Ví dụ: GROUP BY Column1, (Column2, ... ColumnN ) được cho phép trong tiêu chuẩn nhưng không được phép trong Transact-SQL. Transact-SQL hỗ trợ GROUP BY C1, GROUPING SETS ((Column2, ... ColumnN)) GROUP BY Column1, Column2, ... ColumnN , tương đương về mặt ngữ nghĩa . Chúng tương đương về mặt ngữ nghĩa với ví dụ GROUP BY trước đó. Điều này là để tránh khả năng GROUP BY Column1, (Column2, ... ColumnN ) có thể bị hiểu sai thành GROUP BY C1, GROUPING SETS ((Column2, ... ColumnN)) < / code>, không tương đương về mặt ngữ nghĩa.

  • Các tập hợp nhóm không được phép bên trong các tập hợp nhóm. Ví dụ: GROUP BY GROUPING SET (A1, A2, ... An, GROUPING SETS (C1, C2, ... Cn)) được phép trong tiêu chuẩn SQL-2006 nhưng không được phép trong Transact- SQL. Transact-SQL cho phép GROUP BY GROUPING SETS (A1, A2, ... An, C1, C2, ... Cn) hoặc GROUP BY GROUPING SETS ((A1), (A2) , ... (An), (C1), (C2), ... (Cn)) , tương đương về mặt ngữ nghĩa với ví dụ GROUP BY đầu tiên và có cú pháp rõ ràng hơn.

  • GROUP BY [ALL / DISTINCT] chỉ được phép trong mệnh đề GROUP BY đơn giản có chứa biểu thức cột. Nó không được phép với cấu trúc GROUPING SETS, ROLLUP, CUBE, WITH CUBE hoặc WITH ROLLUP. TẤT CẢ là mặc định và là ngầm định. Nó cũng chỉ được phép trong cú pháp tương thích ngược.

So sánh các tính năng của GROUP được hỗ trợ

Bảng sau mô tả các tính năng GROUP BY được hỗ trợ dựa trên các phiên bản SQL và mức độ tương thích của cơ sở dữ liệu.

Tính năng
Dịch vụ tích hợp máy chủ SQL
Mức độ tương thích của SQL Server 100 trở lên
SQL Server 2008 trở lên với mức độ tương thích 90.

DISTINCT tổng hợp
Không được hỗ trợ cho WITH CUBE hoặc WITH ROLLUP.
Được hỗ trợ cho WITH CUBE, WITH ROLLUP, GROUPING SETS, CUBE hoặc ROLLUP.
Tương tự như mức độ tương thích 100.

Hàm do người dùng xác định với tên CUBE hoặc ROLLUP trong mệnh đề GROUP BY
Hàm do người dùng xác định dbo.cube ( arg1 , ... argN ) hoặc dbo.rollup ( arg1 < strong>, ... argN ) trong mệnh đề GROUP BY được cho phép.

Ví dụ: SELECT SUM (x) FROM T GROUP BY dbo.cube (y);
Hàm do người dùng xác định dbo.cube ( arg1 , ... argN **) ** hoặc dbo.rollup ( arg1 , ... argN ) trong mệnh đề GROUP BY không được phép.

Ví dụ: SELECT SUM (x) FROM T GROUP BY dbo. cube (y);

Thông báo lỗi sau được trả về: "Cú pháp không chính xác gần từ khóa 'cube' | 'rollup'."

Để tránh điều này sự cố, hãy thay thế dbo.cube bằng [dbo]. [cube] hoặc dbo.rollup bằng [dbo]. [rollup] .

Ví dụ sau được cho phép: SELECT SUM (x) FROM T GROUP BY [dbo]. [cube] (y);
Hàm do người dùng xác định dbo.cube ( arg1 , ... argN) hoặc dbo.rollup ( arg1 , ... argN ) trong mệnh đề GROUP BY được cho phép

Ví dụ: SELECT SUM (x) FROM T GROUP BY dbo.cube (y); < / code>

TẬP HỢP NHÓM
Không được hỗ trợ
Được hỗ trợ
Được hỗ trợ

CUBE
Không được hỗ trợ
Được hỗ trợ
Không được hỗ trợ

ROLLUP
Không được hỗ trợ
Được hỗ trợ
Không được hỗ trợ

Tổng cộng, chẳng hạn như GROUP BY ()
Không được hỗ trợ
Được hỗ trợ
Được hỗ trợ

Hàm GROUPING_ID
Không được hỗ trợ
Được hỗ trợ
Được hỗ trợ

Chức năng NHÓM
Được hỗ trợ
Được hỗ trợ
Được hỗ trợ

VỚI CUBE
Được hỗ trợ
Được hỗ trợ
Được hỗ trợ

VỚI ROLLUP
Được hỗ trợ
Được hỗ trợ
Được hỗ trợ

Loại bỏ nhóm "trùng lặp" với CUBE hoặc WITH ROLLUP
Được hỗ trợ
Được hỗ trợ
Được hỗ trợ

Ví dụ

A. Sử dụng mệnh đề GROUP BY đơn giản

Ví dụ sau lấy tổng số cho mỗi SalesOrderID từ bảng SalesOrderDetail . Ví dụ này sử dụng AdventureWorks.

  CHỌN SalesOrderID, SUM (LineTotal) AS SubTotal
TỪ Sales.SalesOrderDetail AS sod
NHÓM THEO SalesOrderID
ĐẶT HÀNG BẰNG SalesOrderID;
 

B. Sử dụng mệnh đề GROUP BY với nhiều bảng

Ví dụ sau đây truy xuất số lượng nhân viên cho mỗi Thành phố từ bảng Address được kết hợp với bảng EmployeeAddress . Ví dụ này sử dụng AdventureWorks.

  CHỌN a.City, COUNT (bea.AddressID) EmployeeCount
TỪ Person.BusinessEntityAddress AS bea
    THAM GIA INNER Person.Địa chỉ NHƯ a
        ON bea.AddressID = a.AddressID
NHÓM THEO a.City
ĐẶT HÀNG THEO a.City;
 

C. Sử dụng mệnh đề GROUP BY với một biểu thức

Ví dụ sau đây truy xuất tổng doanh số cho mỗi năm bằng cách sử dụng hàm DATEPART . Cùng một biểu thức phải có trong cả danh sách SELECT và mệnh đề GROUP BY .

  CHỌN DATEPART (yyyy, OrderDate) AS N'Year '
    , SUM (TotalDue) NHƯ N'Tổng số tiền đặt hàng '
TỪ Sales.SalesOrderHeader
NHÓM THEO DATEPART (yyyy, OrderDate)
ĐẶT HÀNG BẰNG DATEPART (yyyy, Ngày đặt hàng);
 

D. Sử dụng mệnh đề GROUP BY với mệnh đề HAVING

Ví dụ sau sử dụng mệnh đề HAVING để chỉ định nhóm nào được tạo trong mệnh đề GROUP BY nên được đưa vào tập kết quả.

  CHỌN DATEPART (yyyy, OrderDate) AS N'Year '
    , SUM (TotalDue) NHƯ N'Tổng số tiền đặt hàng '
TỪ Sales.SalesOrderHeader
NHÓM THEO DATEPART (yyyy, OrderDate)
CÓ DATEPART (yyyy, OrderDate) & gt; = N'2003 '
ĐẶT HÀNG BẰNG DATEPART (yyyy, Ngày đặt hàng);
 

Ví dụ: Azure Synapse Analytics và Parallel Data Warehouse

E. Cách sử dụng cơ bản của mệnh đề GROUP BY

Ví dụ sau đây tìm tổng số tiền cho tất cả các lần bán hàng vào mỗi ngày. Một hàng chứa tổng của tất cả doanh số được trả lại cho mỗi ngày.

  - Sử dụng AdventureWorksDW
  
CHỌN OrderDateKey, SUM (SalesAmount) AS TotalSales TỪ FactInternetSales
NHÓM THEO OrderDateKey ORDER BY OrderDateKey;
 

F. Sử dụng cơ bản gợi ý DISTRIBUTED_AGG

Ví dụ này sử dụng gợi ý truy vấn DISTRIBUTED_AGG để buộc công cụ xáo trộn bảng trên cột CustomerKey trước khi thực hiện tổng hợp.

  - Sử dụng AdventureWorksDW
  
CHỌN CustomerKey, SUM (SalesAmount) AS sas
TỪ FactInternetSales
NHÓM THEO KHÓA KHÁCH HÀNG VỚI (DISTRIBUTED_AGG)
ĐẶT HÀNG THEO CustomerKey DESC;
 

G. Các biến thể cú pháp cho GROUP BY

Khi danh sách chọn không có tổng hợp, mỗi cột trong danh sách chọn phải được đưa vào danh sách GROUP BY. Các cột được tính toán trong danh sách chọn có thể được liệt kê, nhưng không bắt buộc, trong danh sách GROUP BY. Đây là những ví dụ về câu lệnh SELECT hợp lệ về mặt cú pháp:

  - Sử dụng AdventureWorks
  
CHỌN LastName, FirstName TỪ NHÓM DimCustomer THEO LastName, FirstName;
CHỌN NumberCarsOwned from DimCustomer GROUP BY YearlyIncome, NumberCarsOwned;
CHỌN (SalesAmount + TaxAmt + Freight) AS TotalCost TỪ FactInternetSales GROUP BY SalesAmount, TaxAmt, Freight;
CHỌN SalesAmount, SalesAmount * 1.10 SalesTax TỪ NHÓM FactInternetSales THEO SalesAmount;
CHỌN SalesAmount TỪ NHÓM FactInternetSales THEO SalesAmount, SalesAmount * 1.10;
 

H. Sử dụng GROUP BY với nhiều biểu thức GROUP BY

Ví dụ sau nhóm các kết quả bằng cách sử dụng nhiều tiêu chí GROUP BY . Nếu trong mỗi nhóm OrderDateKey có các nhóm con có thể được phân biệt bằng DueDateKey , thì một nhóm mới sẽ được xác định cho tập kết quả.

  - Sử dụng AdventureWorks
  
CHỌN OrderDateKey, DueDateKey, SUM (SalesAmount) AS TotalSales
TỪ FactInternetSales
GROUP BY OrderDateKey, DueDateKey
ĐẶT HÀNG THEO OrderDateKey;
 

Tôi. Sử dụng mệnh đề GROUP BY với mệnh đề HAVING

Ví dụ sau sử dụng mệnh đề HAVING để chỉ định các nhóm được tạo trong GROUP BY mệnh đề cần được bao gồm trong tập kết quả. Chỉ những nhóm có ngày đặt hàng từ năm 2004 trở lên mới được đưa vào kết quả.

  - Sử dụng AdventureWorks
  
CHỌN OrderDateKey, SUM (SalesAmount) AS TotalSales
TỪ FactInternetSales
NHÓM THEO OrderDateKey
CÓ OrderDateKey & gt; 20040000
ĐẶT HÀNG THEO OrderDateKey;
 

Xem thêm

GROUPING_ID (Transact-SQL)
NHÓM (Transact-SQL)
CHỌN (Giao dịch-SQL)
Mệnh đề SELECT (Giao dịch-SQL)


Xem thêm những thông tin liên quan đến chủ đề nhóm người dùng theo sql

Asg.P11: Tạo và phân quyền cho User trong SQL Server

  • Tác giả: Anh Nguyen Ngoc
  • Ngày đăng: 2020-06-22
  • Đánh giá: 4 ⭐ ( 4537 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Quản trị Cơ sở dữ liệu SQL Server playlist: https://www.youtube.com/playlist?list=PLn9lhDYvf_3Gdiz6uY9HAztCKapCvzTPe
    Nhóm thảo luận: https://www.facebook.com/groups/115838366528104

Kiểm soát truy cập cho người dùng và vai trò trong SQL

  • Tác giả: vi.eyewated.com
  • Đánh giá: 3 ⭐ ( 1902 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

SQL là gì? Các lệnh cơ bản trong lập trình cơ sở dữ liệu SQL

  • Tác giả: wiki.matbao.net
  • Đánh giá: 4 ⭐ ( 7852 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: SQL là gì? SQL là loại ngôn ngữ máy tính, giúp cho thao tác lưu trữ và truy xuất dữ liệu được lưu trữ trong một cơ sở dữ liệu quan hệ.

Cách thêm nhóm người dùng Active Directory làm đăng nhập trong SQL Server

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 1336 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Trong SQL Server Management Studio, hãy truy cập Object Explorer > (your server) > Security >…

Khắc phục sự cố đứng sẵn sàng nghe tạo nhóm SQL Server 2012

  • Tác giả: support.microsoft.com
  • Đánh giá: 4 ⭐ ( 9956 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài viết này mô tả các bước khắc phục sự cố có thể giúp giải quyết sự cố xảy ra trong quá trình tạo của nghe nhóm khả dụng luôn bật trong SQL Server 2012.

Nhóm theo SQL

  • Tác giả: vi.tutorialcup.com
  • Đánh giá: 3 ⭐ ( 2184 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nhóm theo SQL

Nhóm người theo dõi - 3 trường hợp sử dụng chính để đồng bộ hóa triển khai SQL và NoSQL

  • Tác giả: helpex.vn
  • Đánh giá: 4 ⭐ ( 7116 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cụm người theo dõi là một tính năng ScaleGrid cho phép bạn giữ đồng bộ hai hệ thống cơ sở dữ liệu độc lập (cùng loại). Không giống như nhân bản hoặc sao chép, điều này cho phép bạn duy trì…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php