Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Nghệ thuật tổng hợp dữ liệu trong SQL từ các tổng hợp đơn giản đến trượt

Hãy để chúng tôi bắt đầu hành trình SQL của mình để hiểu dữ liệu tổng hợp trong SQL và các loại tổng hợp bao gồm cả tổng hợp đơn giản và tổng hợp trượt.

Trước khi chúng ta chuyển sang phần tổng hợp, chúng ta nên xem xét các thông tin thú vị mà một số nhà phát triển thường bỏ qua khi nói đến SQL nói chung và tập hợp nói riêng.

Trong bài viết này, SQL đề cập đến T-SQL là phiên bản SQL của Microsoft và có nhiều tính năng hơn so với SQL tiêu chuẩn.

Các phép toán đằng sau SQL

Điều rất quan trọng là phải hiểu rằng T-SQL dựa trên một số khái niệm toán học vững chắc mặc dù nó không phải là một ngôn ngữ dựa trên toán học cứng nhắc.

Theo cuốn sách “Microsoft_SQL_Server_2008_T_SQL_Fundamentals” của Itzik Ben-Gan, SQL được thiết kế để truy vấn và quản lý dữ liệu trong hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS).

Bản thân hệ quản trị cơ sở dữ liệu quan hệ dựa trên hai nhánh toán học vững chắc:

  • Lý thuyết Đặt
  • Logic vị từ

Lý thuyết tập hợp

Lý thuyết tập hợp, như tên gọi đã chỉ ra, là một nhánh của toán học về các tập hợp cũng có thể được gọi là tập hợp của các đối tượng khác biệt xác định.

Nói tóm lại, trong lý thuyết tập hợp, chúng ta nghĩ về tổng thể các sự vật hoặc đối tượng giống như cách chúng ta nghĩ về một mặt hàng riêng lẻ.

Ví dụ:một cuốn sách là một tập hợp của tất cả các cuốn sách riêng biệt nhất định, do đó, chúng tôi lấy một cuốn sách tổng thể là đủ để có được thông tin chi tiết về tất cả các cuốn sách trong đó.

Logic vị từ

Logic vị từ là một logic Boolean trả về true hoặc false tùy thuộc vào điều kiện hoặc giá trị của các biến.

Logic vị từ có thể được sử dụng để thực thi các quy tắc toàn vẹn (giá phải lớn hơn 0,00) hoặc lọc dữ liệu (trong đó giá lớn hơn 10,00), tuy nhiên, trong ngữ cảnh của T-SQL, chúng ta có ba giá trị logic như sau:

  1. Đúng
  2. Sai
  3. Không xác định (Null)

Điều này có thể được minh họa như sau:

Ví dụ về vị từ là “Giá sách lớn hơn 10,00”.

Vậy là đủ về toán học, nhưng hãy nhớ rằng tôi sẽ đề cập đến nó ở phần sau của bài viết.

Tại sao việc tổng hợp dữ liệu trong SQL lại dễ dàng

Việc tổng hợp dữ liệu trong SQL ở dạng đơn giản nhất là việc tìm hiểu về các tổng chỉ trong một lần.

Ví dụ:nếu chúng tôi có một bảng khách hàng chứa danh sách tất cả các khách hàng cùng với thông tin chi tiết của họ thì dữ liệu tổng hợp của bảng khách hàng có thể cung cấp cho chúng tôi tổng số khách hàng mà chúng tôi có.

Như đã thảo luận trước đó, chúng tôi coi một tập hợp là một mục duy nhất, vì vậy chúng tôi chỉ cần áp dụng một hàm tổng hợp cho bảng để lấy tổng.

Vì SQL ban đầu là một ngôn ngữ dựa trên tập hợp (như đã thảo luận trước đó), nên việc áp dụng các hàm tổng hợp cho nó tương đối dễ dàng hơn so với các ngôn ngữ khác.

Ví dụ:nếu chúng ta có một bảng sản phẩm có bản ghi của tất cả các sản phẩm trong cơ sở dữ liệu thì chúng ta có thể áp dụng ngay hàm đếm cho bảng sản phẩm để lấy tổng số sản phẩm thay vì đếm từng sản phẩm một trong một vòng lặp.

Công thức tổng hợp dữ liệu

Để tổng hợp dữ liệu trong SQL, chúng ta cần tối thiểu những điều sau:

  1. Dữ liệu (bảng) với các cột khi được tổng hợp sẽ có ý nghĩa
  2. Một hàm tổng hợp sẽ được áp dụng trên dữ liệu

Chuẩn bị Dữ liệu Mẫu (Bảng)

Hãy để chúng tôi lấy một ví dụ về một bảng đơn hàng đơn giản chứa ba thứ (cột):

  1. Số đơn đặt hàng (OrderId)
  2. Ngày đặt hàng (OrderDate)
  3. Số lượng của đơn đặt hàng (TotalAmount)

Hãy để chúng tôi tạo cơ sở dữ liệu AggregateSample để tiếp tục:

 - Tạo cơ sở dữ liệu mẫu tổng hợp TẠO CƠ SỞ DỮ LIỆU AggregateSample 

Bây giờ, hãy tạo bảng đơn hàng trong cơ sở dữ liệu mẫu như sau:

 - Tạo bảng đơn hàng trong cơ sở dữ liệu mẫu tổng hợp BẢNG AggregateSampleCREATE Đơn đặt hàng (OrderId INT PRIMARY KEY IDENTITY (1,1), OrderDate DATETIME2, TotalAmount DECIMAL (10,2)) 

Đang điền dữ liệu mẫu

Điền vào bảng bằng cách thêm một hàng:

 INSERT INTO dbo.SimpleOrder (OrderDate, TotalAmount) GIÁ TRỊ ('20180101' - OrderDate - datetime2, 20.50 - TotalAmount - decimal (10, 2)); ĐI 

Bây giờ chúng ta hãy nhìn vào bảng:

 - Xem bảng đơn hàng CHỌN OrderId, OrderDate, TotalAmount TỪ SimpleOrder 

Xin lưu ý rằng tôi đang sử dụng dbForge Studio cho SQL Server trong bài viết này nên chỉ giao diện đầu ra có thể khác nếu bạn chạy cùng một mã trong SSMS (SQL Server Management Studio), không có sự khác biệt nào về các tập lệnh và kết quả của chúng.

Các hàm tổng hợp cơ bản

Các hàm tổng hợp cơ bản có thể được áp dụng cho bảng như sau:

  1. Tổng
  2. Đếm
  3. Tối thiểu
  4. Tối đa
  5. Trung bình

Bảng Bản ghi Tổng hợp

Bây giờ câu hỏi thú vị là, "chúng ta có thể tổng hợp (tổng hoặc đếm) dữ liệu (bản ghi) trong một bảng nếu nó chỉ có một hàng như trong trường hợp của chúng ta không?" Câu trả lời là “Có”, chúng tôi có thể, mặc dù điều đó không có nhiều ý nghĩa nhưng nó có thể giúp chúng tôi hiểu cách dữ liệu sẵn sàng để tổng hợp.

Để có được tổng số đơn đặt hàng, chúng ta sử dụng hàm count () với bảng, như đã thảo luận trước đó, chúng ta có thể chỉ cần áp dụng hàm tổng hợp cho bảng vì SQL là ngôn ngữ dựa trên tập hợp và các phép toán có thể được áp dụng cho một tập hợp trực tiếp.

 - Nhận tổng số đơn hàng đã đặt cho đến naySELECT COUNT (*) AS Total_Order FROM SimpleOrder 

Bây giờ, còn đơn đặt hàng với số tiền tối thiểu, tối đa và trung bình cho một bản ghi:

 - Nhận đơn đặt hàng với số tiền tối thiểu, số tiền tối đa, số tiền trung bình và tổng số đơn đặt hàng 

Như chúng ta có thể thấy từ đầu ra, số tiền tối thiểu, tối đa và trung bình là như nhau nếu chúng ta có một bản ghi, vì vậy việc áp dụng một hàm tổng hợp cho một bản ghi là có thể nhưng nó cho chúng ta cùng một kết quả.

Chúng tôi cần ít nhất một bản ghi để hiểu dữ liệu tổng hợp.

Bảng tổng hợp nhiều bản ghi

Bây giờ chúng ta hãy thêm bốn bản ghi nữa như sau:

 INSERT INTO dbo.SimpleOrder (OrderDate, TotalAmount) VALUES ('20180101' - OrderDate - datetime2, 20.50 - TotalAmount - decimal (10, 2)), ('20180102' - OrderDate - datetime2, 30.50 - TotalAmount - decimal (10, 2)), ('20180103' - OrderDate - datetime2, 10.50 - TotalAmount - decimal (10, 2)), ('20180110' - OrderDate - datetime2, 100,50 - TotalAmount - thập phân ( 10, 2)); ĐI 

Bảng bây giờ trông như sau:

Nếu chúng ta áp dụng các hàm tổng hợp cho bảng ngay bây giờ, chúng ta sẽ thu được kết quả tốt:

 - Nhận đơn đặt hàng với số tiền tối thiểu, số tiền tối đa, số tiền trung bình và tổng số đơn đặt hàng 

Nhóm dữ liệu tổng hợp

Chúng tôi có thể nhóm dữ liệu tổng hợp theo bất kỳ cột hoặc tập hợp cột nào để nhận dữ liệu tổng hợp dựa trên cột đó.

Ví dụ:nếu chúng tôi muốn biết tổng số đơn đặt hàng mỗi ngày, chúng ta phải nhóm bảng theo ngày bằng mệnh đề Group by như sau:

 - Nhận tổng số đơn đặt hàng mỗi ngàySELECT OrderDate, COUNT (*) AS Total_OrdersFROM SimpleOrderGROUP BY OrderDate 

Kết quả như sau:

Vì vậy, nếu chúng tôi muốn xem tổng của tất cả số tiền đặt hàng, chúng ta có thể chỉ cần áp dụng hàm sum cho cột tổng số tiền mà không cần bất kỳ nhóm nào như sau:

 - Tổng của tất cả số lượng đơn đặt hàngSELECT SUM (TotalAmount) AS Sum_of_Orders_AmountFROM SimpleOrder 

Để có được tổng số lượng đơn đặt hàng mỗi ngày, chúng ta chỉ cần thêm nhóm theo ngày vào câu lệnh SQL ở trên như sau:

 - Tổng của tất cả số tiền đơn đặt hàng mỗi ngày 

Nhận Tổng số mà không cần nhóm dữ liệu

Chúng tôi có thể lấy ngay các tổng số chẳng hạn như tổng số đơn đặt hàng, số lượng đơn đặt hàng tối đa, số lượng đặt hàng tối thiểu, tổng số lượng đơn đặt hàng, số lượng đơn đặt hàng trung bình mà không cần nhóm lại nếu tổng hợp là dành cho tất cả các bảng.

 - Nhận đơn đặt hàng với số tiền tối thiểu, số tiền tối đa, số tiền trung bình, tổng số tiền và tổng số đơn đặt hàngSELECT COUNT (*) AS Total_Orders, MIN (TotalAmount) AS Min_Amount, MAX (TotalAmount) AS Max_Amount, AVG (TotalAmount) AS Average_Amount , SUM (TotalAmount) AS Sum_of_AmountFROM SimpleOrder 

Thêm khách hàng vào đơn đặt hàng

Hãy để chúng tôi thêm một số niềm vui bằng cách thêm khách hàng vào bảng của chúng tôi. Chúng ta có thể làm điều này bằng cách tạo một bảng khách hàng khác và chuyển id khách hàng vào bảng đơn đặt hàng, tuy nhiên để giữ cho nó đơn giản và mô phỏng kiểu kho dữ liệu (nơi các bảng không chuẩn hóa), tôi sẽ thêm cột tên khách hàng vào bảng đơn hàng như sau :

 - Thêm cột Tên khách hàng và dữ liệu vào BẢNG ĐẶT HÀNG ĐẶT HÀNG SimpleOrder THÊM Tên Khách Hàng VARCHAR (40) NULL GO UPDATE SimpleOrderSET CustomerName ='Eric'WHERE OrderId =1GOUPDATE SimpleOrderSET CustomerName =' Sadaf'WHERE OrderId =2GOUPDATE Khách hàng SimpleOrder ='Peter 'WHERE OrderId =3GOUPDATE SimpleOrderSET CustomerName =' Asif'WHERE OrderId =4GOUPDATE SimpleOrderSET CustomerName ='Peter'WHERE OrderId =5GO 

Nhận Tổng số đơn đặt hàng cho mỗi khách hàng

Bây giờ bạn có thể đoán làm thế nào để có được tổng số đơn đặt hàng cho mỗi khách hàng không? Bạn cần phải nhóm theo khách hàng (Tên khách hàng) và áp dụng hàm tổng hợp đếm () cho tất cả các bản ghi như sau:

 - Tổng số đơn đặt hàng cho mỗi khách hàng CHỌN Tên khách hàng, COUNT (*) NHƯ Tổng số đơn đặt hàng TỪ NHÓM Đơn đặt hàng đơn giản THEO Tên khách hàng 

Thêm năm bản ghi khác vào bảng đơn hàng

Bây giờ chúng ta sẽ thêm năm hàng nữa vào bảng thứ tự đơn giản như sau:

 - Thêm 5 bản ghi nữa để đặt hàng tableINSERT INTO SimpleOrder (OrderDate, TotalAmount, CustomerName) VALUES ('01 -Jan-2018 ', 70.50,' Sam '), ('02 -Jan-2018', 170.50, ' Adil '), ('03 -Jan-2018', 50.00, 'Sarah'), ('04 -Jan-2018 ', 50.00,' Asif '), ('11 -Jan-2018', 50.00, 'Peter' ) ĐI 

Hãy xem dữ liệu ngay bây giờ:

 - Xem bảng đơn đặt hàng sau khi thêm tên khách hàng và năm hàng khác 

Nhận Tổng số đơn hàng cho mỗi khách hàng được sắp xếp theo số lượng đơn hàng tối đa đến tối thiểu

Nếu bạn quan tâm đến tổng số đơn đặt hàng của mỗi khách hàng được sắp xếp theo đơn đặt hàng tối đa đến tối thiểu, thì không nên chia nhỏ điều này thành các bước nhỏ hơn như sau:

 - (1) Nhận tổng số đơn đặt hàngSELECT COUNT (*) AS Total_Orders FROM SimpleOrder 

 - (2) Nhận tổng số đơn đặt hàng cho mỗi khách hàng 

Để sắp xếp số lượng đơn hàng từ tối đa đến tối thiểu, chúng ta cần sử dụng mệnh đề Order By DESC (thứ tự giảm dần) với count () ở cuối như sau:

 - (3) Nhận tổng số đơn đặt hàng cho mỗi khách hàng từ số đơn hàng tối đa đến tối thiểu 

Nhận Tổng số đơn hàng mỗi ngày được sắp xếp theo đơn hàng gần đây nhất trước

Sử dụng phương pháp trên, bây giờ chúng ta có thể tìm ra tổng số đơn đặt hàng mỗi ngày được sắp xếp theo đơn hàng gần đây nhất trước tiên như sau:

 - Nhận tổng số đơn đặt hàng mỗi ngày từ đầu tiên gần đây nhất 

Hàm CAST giúp chúng ta chỉ lấy phần ngày tháng. Kết quả như sau:

Bạn có thể sử dụng nhiều kết hợp nhất có thể, miễn là chúng có ý nghĩa.

Tổng hợp đang chạy

Bây giờ chúng ta đã quen với việc áp dụng các hàm tổng hợp cho dữ liệu của mình, chúng ta hãy chuyển sang dạng tổng hợp nâng cao và một dạng tổng hợp như vậy là tổng hợp đang chạy.

Các tổng hợp đang chạy là các tập hợp được áp dụng cho một tập hợp con dữ liệu chứ không phải cho toàn bộ tập dữ liệu, điều này giúp chúng tôi tạo các cửa sổ nhỏ trên dữ liệu.

Cho đến nay, chúng tôi đã thấy tất cả các hàm tổng hợp được áp dụng cho tất cả các hàng của bảng có thể được nhóm theo một số cột như ngày đặt hàng hoặc tên khách hàng, nhưng với các tổng hợp đang chạy, chúng tôi có quyền tự do áp dụng các hàm tổng hợp mà không cần nhóm toàn bộ tập dữ liệu.

Rõ ràng, điều này có nghĩa là chúng ta có thể áp dụng hàm tổng hợp mà không cần sử dụng mệnh đề Group By, điều này hơi lạ đối với những người mới bắt đầu sử dụng SQL (hoặc đôi khi một số nhà phát triển bỏ qua điều này), những người không quen với các hàm cửa sổ và chạy các tổng hợp.

Windows trên dữ liệu

Như đã nói trước đó, tập hợp đang chạy được áp dụng cho một tập hợp con của tập dữ liệu hoặc (nói cách khác) trên các cửa sổ dữ liệu nhỏ.

Hãy coi các cửa sổ như một tập hợp trong một tập hợp hoặc một (các) bảng trong một bảng. Một ví dụ điển hình về việc tạo cửa sổ trên dữ liệu trong trường hợp của chúng ta là, chúng ta có bảng đơn hàng chứa các đơn hàng được đặt vào các ngày khác nhau, vậy nếu mỗi ngày là một cửa sổ riêng biệt thì sao, thì chúng ta có thể áp dụng các hàm tổng hợp trên mỗi cửa sổ giống như cách chúng ta đã áp dụng bảng.

Nếu chúng ta sắp xếp bảng đơn hàng (SimpleOrder) theo ngày đặt hàng (OrderDate) như sau:

 - Xem bảng đơn hàng được sắp xếp theo ngày đặt hàngSELECT so.OrderId, so.OrderDate, so.TotalAmount, so.CustomerName FROM SimpleOrder so ORDER BY so.OrderDate 

Windows trên dữ liệu sẵn sàng để chạy các tổng hợp có thể xem bên dưới:

Chúng tôi cũng có thể coi các cửa sổ hoặc tập hợp con này là sáu bảng nhỏ dựa trên ngày đặt hàng và tổng hợp có thể được áp dụng trên mỗi bảng nhỏ này.

Sử dụng phân vùng theo mệnh đề OVER () bên trong

Các tổng hợp đang chạy có thể được áp dụng bằng cách phân vùng bảng bằng cách sử dụng "Partition by" bên trong mệnh đề OVER ().

Ví dụ:nếu chúng ta muốn phân vùng bảng thứ tự theo ngày, chẳng hạn như mỗi ngày là một bảng con hoặc cửa sổ trên tập dữ liệu, thì chúng ta phải Phân vùng dữ liệu theo ngày đặt hàng và điều này có thể đạt được bằng cách sử dụng một hàm tổng hợp như COUNT ( ) với OVER () và Partition by bên trong OVER () như sau:

 - Chạy Tổng hợp trên bảng Đơn hàng bằng cách phân vùng theo ngày 

Đang chạy Tổng số mỗi cửa sổ Ngày (Phân vùng)

Việc chạy tổng hợp giúp chúng tôi giới hạn phạm vi tổng hợp chỉ trong cửa sổ đã xác định và chúng tôi có thể nhận tổng số đang chạy trên mỗi cửa sổ như sau:

 - Nhận tổng số đơn đặt hàng, số tiền tối thiểu, số tiền tối đa, số tiền trung bình và tổng của tất cả số tiền trên mỗi cửa sổ ngày (phân vùng theo ngày) CHỌN ĐÚC (Ngày đặt hàng NHƯ NGÀY) NHƯ Ngày đặt hàng, Đếm =COUNT (*) HẾT (PHẦN THEO OrderDate), Min_Amount =MIN (TotalAmount) OVER (PARTITION BY OrderDate), Max_Amount =MAX (TotalAmount) OVER (PARTITION BY OrderDate), Average_Amount =AVG (TotalAmount) OVER (PARTITION BY OrderDate), Sum_Amount =SUM (TotalAmount) HẾT ( PHẦN THEO Ngày đặt hàng) TỪ Đơn đặt hàng đơn giản 

Bắt đầu Tổng số trên mỗi Cửa sổ Khách hàng (Phân vùng)

Cũng giống như tổng số đang chạy trên mỗi cửa sổ ngày, chúng tôi cũng có thể tính tổng số đang chạy trên mỗi cửa sổ khách hàng bằng cách phân chia tập hợp đơn đặt hàng (bảng) thành các tập hợp con khách hàng nhỏ (phân vùng) như sau:

 - Nhận tổng số đơn đặt hàng, số tiền tối thiểu, số tiền tối đa, số tiền trung bình và tổng của tất cả số tiền trên mỗi cửa sổ khách hàng (phân vùng theo khách hàng) CHỌN Tên khách hàng, CAST (Ngày đặt hàng NHƯ NGÀY) NHƯ Ngày đặt hàng, Đếm =COUNT (*) HẾT ( PARTITION BY CustomerName), Min_Amount =MIN (TotalAmount) HẾT (PARTITION BY CustomerName), Max_Amount =MAX (TotalAmount) OVER (PARTITION BY CustomerName), Average_Amount =AVG (TotalAmount) OVER (PARTITION BY CustomerName), Sum_Amount =SUM (TotalAmount) HẾT (PHẦN THEO Tên Khách Hàng) TỪ ĐƠN HÀNG SimpleOrder THEO SỐ MÔ TẢ, Ngày đặt hàng 

Tổng hợp trượt

Các tổng hợp trượt là các tập hợp có thể được áp dụng cho các khung bên trong một cửa sổ có nghĩa là thu hẹp phạm vi hơn nữa trong cửa sổ (phân vùng).

Nói cách khác, tổng số đang chạy cung cấp cho chúng tôi tổng số (tổng, trung bình, tối thiểu, tối đa, số đếm) cho toàn bộ cửa sổ (tập hợp con) mà chúng tôi tạo trong một bảng, trong khi tổng số trượt cung cấp cho chúng tôi tổng số (tổng, trung bình, tối thiểu, tối đa, số đếm) cho khung (tập hợp con của tập hợp con) trong cửa sổ (tập hợp con) của bảng.

Ví dụ:nếu chúng tôi tạo một cửa sổ dựa trên dữ liệu dựa trên (phân vùng theo khách hàng) thì chúng tôi có thể thấy khách hàng “Peter” có ba bản ghi trong cửa sổ của nó và tất cả các tổng hợp được áp dụng cho ba bản ghi này. Bây giờ, nếu chúng ta chỉ muốn tạo khung cho hai hàng tại một thời điểm có nghĩa là tổng hợp được thu hẹp hơn nữa và sau đó nó được áp dụng cho hàng đầu tiên và hàng thứ hai rồi đến hàng thứ hai và thứ ba, v.v.

Sử dụng ROWS PRECEEDING với Mệnh đề Order By bên trong OVER ()

Tổng hợp trượt có thể được áp dụng bằng cách thêm ROWS PRECEEDING với Order By (sau Partition By) trong khi ROWS PRECEEDING xác định phạm vi của Frame trong cửa sổ.

Ví dụ:nếu chúng tôi chỉ muốn tổng hợp dữ liệu cho hai hàng tại một thời điểm cho mỗi khách hàng thì chúng tôi cần áp dụng tổng hợp trượt cho bảng đơn hàng như sau:

 - Nhận số tiền tối thiểu, số tiền tối đa, số tiền trung bình trên mỗi khung hình cho mỗi cửa sổ khách hàng CHỌN Tên khách hàng, Số tiền tối thiểu =Số tiền tối thiểu (TotalAmount) HƠN (PHẦN THEO Tên khách hàng ĐẶT HÀNG THEO ngày đặt hàng ROWS 1 PRECEDING), Số tiền tối đa =Số tiền tối đa (Tổng số tiền) HẾT (PHẦN ĐƠN HÀNG THEO Tên Khách Hàng THEO ĐƠN HÀNG Ngày 1 TIỀN ĐẶT TRƯỚC), Average_Amount =AVG (TotalAmount) HẾT (PHẦN THEO Tên Khách Hàng ĐẶT HÀNG THEO ĐƠN HÀNG NGÀY 1 PRECEDING) TỪ SimpleOrder nên ĐẶT HÀNG THEO Tên Khách Hàng 

Để hiểu cách hoạt động, chúng ta hãy xem bảng gốc trong ngữ cảnh của các khung và cửa sổ:

Trong hàng đầu tiên của cửa sổ khách hàng Peter, anh ấy đã đặt một đơn hàng có số lượng là 30,50 vì đây là đầu khung trong cửa sổ khách hàng, vì vậy giá trị tối thiểu và tối đa giống nhau vì không có hàng nào trước đó để so sánh.

Tiếp theo, số tiền tối thiểu vẫn giữ nguyên nhưng số tiền tối đa trở thành 100,50 vì số lượng hàng trước đó (hàng đầu tiên) là 30,50 và số tiền hàng này là 100,50, do đó, số tiền tối đa của cả hai là 100,50.

Tiếp theo, chuyển sang hàng thứ ba, việc so sánh sẽ diễn ra với hàng thứ hai nên số tiền tối thiểu của hai hàng là 50,00 và số tiền lớn nhất của hai hàng là 100,50.

Chức năng MDX từ năm đến nay (YTD) và các tổng hợp đang chạy

MDX là ngôn ngữ biểu thức đa chiều được sử dụng để truy vấn dữ liệu đa chiều (chẳng hạn như khối lập phương) và được sử dụng trong các giải pháp kinh doanh thông minh (BI).

Theo https://docs.microsoft.com/en-us/sql/mdx/ytd-mdx, chức năng Từ đầu năm đến nay (YTD) trong MDX hoạt động giống như cách hoạt động của tổng hợp đang chạy hoặc trượt. Ví dụ:YTD thường được sử dụng kết hợp với không có tham số nào được cung cấp hiển thị tổng số đang hoạt động cho đến nay.

Điều này có nghĩa là nếu chúng ta áp dụng hàm này vào năm, nó sẽ cung cấp cho tất cả dữ liệu của năm, nhưng nếu chúng ta đi sâu vào tháng 3, nó sẽ cung cấp cho chúng ta tất cả các tổng từ đầu năm cho đến tháng 3, v.v.

Điều này rất hữu ích trong các báo cáo SSRS.

Việc cần làm

Đó là nó! Bạn đã sẵn sàng thực hiện một số phân tích dữ liệu cơ bản sau khi xem qua bài viết này và bạn có thể cải thiện kỹ năng của mình hơn nữa bằng những điều sau:

  1. Hãy cố gắng viết một tập lệnh tổng hợp đang chạy bằng cách tạo các cửa sổ trên các cột khác, chẳng hạn như Tổng số tiền.
  2. Ngoài ra, hãy thử viết tập lệnh tổng hợp trượt bằng cách tạo các khung trên các cột khác, chẳng hạn như Tổng số tiền.
  3. Bạn có thể thêm nhiều cột và bản ghi vào bảng (hoặc thậm chí nhiều bảng hơn) để thử các kết hợp tổng hợp khác.
  4. Các tập lệnh mẫu được đề cập trong bài viết này có thể được chuyển thành các thủ tục được lưu trữ để sử dụng trong các báo cáo SSRS đằng sau (các) tập dữ liệu.

Tài liệu tham khảo:

  • Ytd (MDX)
  • dbForge Studio dành cho SQL Server

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mức độ cô lập đã cam kết đọc

  2. Thông tin thêm về Giới thiệu các múi giờ trong Dự án tồn tại lâu dài

  3. Thực tế chuyện gì đang xảy ra với Seek đó?

  4. MERGE:Cập nhật các bảng nguồn và mục tiêu nằm trên các máy chủ riêng biệt

  5. Giải phẫu vai trò phát triển phần mềm:Nhà khoa học dữ liệu