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

Cách sử dụng SQL Server Hàm T-SQL SUM:5 Trường hợp sử dụng

Hàm T-SQL SUM là một trong những hàm cơ bản. Mục đích của nó là để tính toán tổng của tất cả các giá trị trong cột được chỉ định - lưu ý rằng nó chỉ áp dụng cho các cột số.

Dưới đây là cú pháp của SQL SUM.

-- Aggregate Function Syntax    
SUM ( [ ALL | DISTINCT ] expression )  

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
  • TẤT CẢ là một giá trị mặc định, không bắt buộc phải vượt qua. Nó cho phép trả về tổng của tất cả các giá trị.
  • DISTINCT chỉ định rằng nó chỉ phải trả về tổng các giá trị duy nhất, bỏ qua các giá trị trùng lặp.
  • Biểu thức là danh mục kiểu dữ liệu số chính xác hoặc gần đúng, ngoại trừ bit loại dữ liệu.
  • HẾT Mệnh đề với partition_by_clause order_by_clause là để sử dụng chức năng này trên một phân vùng cụ thể.
    • partition_by_clause chia tập kết quả được tạo bởi mệnh đề FROM thành các phân vùng mà hàm được áp dụng
    • order_by_clause xác định thứ tự logic trong đó hoạt động được thực hiện.

Để chứng minh cách sử dụng hàm SUM trong SQL, tôi đã tạo một bảng có tên Nhân viên . Nó có 5 cột - tên , tiền lương , tiền thuê nhà , thuế bản chất việc làm . Các trường hợp sử dụng sau sẽ được chú trọng:

  1. Cách sử dụng cơ bản hoặc Đơn giản của hàm SUM
  2. Sử dụng SUM với các biểu thức CASE
  3. Sử dụng SUM với câu lệnh GROUP BY
  4. Sử dụng SUM với mệnh đề HAVING
  5. Áp dụng SUM cho nhiều biểu thức số học phức tạp

Ngoài ra, chúng ta sẽ tìm hiểu các trường hợp sử dụng khác như sử dụng SUM với mệnh đề WHERE, mệnh đề ORDER BY hoặc sử dụng DISTINCT trong hàm SUM để nhận tổng các giá trị duy nhất. Nhưng điều đầu tiên trước tiên.

Trường hợp Sử dụng 1:Hàm SUM SQL đơn giản

Như đã nêu ở trên, tôi có một bảng tên là Nhân viên với ít cột. Giả sử rằng công ty của bạn muốn biết họ đang chi bao nhiêu tiền lương cho tất cả nhân viên. Để nhận được giá trị, bạn chỉ cần cộng lương của tất cả nhân viên. SUM () sẽ giúp cuộc sống của bạn trở nên dễ dàng, cung cấp các báo cáo như vậy một cách nhanh chóng.

Chúng tôi sẽ sử dụng hàm SUM () trên tiền lương và đầu ra sẽ là tổng chi phí tiền lương được chi cho tất cả nhân viên của công ty:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]

Nếu bạn có bất kỳ giá trị NULL nào trong cột, hàm này sẽ bỏ qua nó và tiếp tục với giá trị hàng tiếp theo. Do đó, bạn có thể có NULL cho bất kỳ nhân viên nào đã rời tổ chức - công ty sẽ không trả bất kỳ khoản nào cho tài nguyên đó.

Bạn có thể xem kết quả bên dưới - nó hiển thị số tiền $ 885000 đã chi trả cho tiền lương của nhân viên:

Nếu có trùng lặp giá trị trên bất kỳ cột nào và bạn muốn nhận tổng của tất cả duy nhất , bạn có thể sử dụng DISTINCT đối số:

USE DBName
GO
--Get the sum of all values from column salary
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GO

--Get the sum of all unique values from column salary
SELECT SUM(DISTINCT Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GO

Tôi đã thực hiện cả hai câu lệnh cùng nhau. Đầu tiên, nó là một trong những bước trước với tất cả các giá trị tiền lương. Giá trị thứ hai dành cho các giá trị duy nhất - nó sử dụng DISTINCT đối số.

Hãy xem ảnh chụp màn hình bên dưới - nó thể hiện kết quả đầu ra của cả hai câu lệnh và chúng khác nhau. Khi tôi sử dụng hàm SUM cho tất cả các giá trị theo mặc định, đầu ra là $ 885000. Khi tôi đang sử dụng DISTINCT đối số để chỉ nhận tổng các giá trị duy nhất, đầu ra là $ 65000.

Do đó, chúng ta có các giá trị tương tự trong cột này. về mặt kinh doanh, điều đó có nghĩa là chúng tôi có ít nhân viên nhận được số tiền tương đương với lương của họ.

Ví dụ này minh họa việc sử dụng DISTINCT đối số để nhận tổng của tất cả các giá trị duy nhất. Trên thực tế, nó cho phép chúng tôi tránh các giá trị trùng lặp từ kết quả cuối cùng.

Chúng tôi cũng có thể sử dụng WHERE mệnh đề trong SQL SUM (). Giả sử công ty của bạn muốn nhận được tổng chi phí mà công ty phải bỏ ra để những nhân viên đang nhận được hơn 100000 đô la tiền lương chứ không phải nhân viên cố định hiểu được phân bổ chi phí. WHERE mệnh đề sẽ lọc kết quả và cung cấp tổng chi phí theo yêu cầu kinh doanh.

Trong câu lệnh T-SQL bên dưới, bạn có thể thấy WHERE điều khoản được thêm vào Bản chất việc làm cột. Cột này lưu giữ hồ sơ của từng nhân viên, cho dù họ là nhân viên chính thức hay hợp đồng.

Lưu ý rằng tôi đã sử dụng toán tử AND để kết hợp cả hai yêu cầu:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO

Kết quả cho thấy rằng công ty chi 240000 đô la cho những nhân viên nhận được 100000 đô la trở lên chứ không phải nhân viên cố định.

Trường hợp sử dụng 2:Hàm SUM trong SQL với biểu thức CASE

Trong kịch bản của chúng tôi, chúng tôi muốn biết có bao nhiêu nhân viên đang làm việc cố định cùng với các thông tin chi tiết khác của họ. để có được kết quả này, chúng tôi có thể sử dụng CASE biểu thức trong SUM () hàm số. Mặc dù vậy, bạn có thể dễ dàng nhận được kết quả này bằng cách chỉ cần đặt WHERE , đôi khi bạn cần CASE SUM trong một yêu cầu truy vấn phức tạp.

Hãy xem bên dưới câu lệnh T-SQL với CASE biểu thức bên trong SUM () chức năng:

--USE SUM function with CASE expression
SELECT 
SUM(
CASE
  WHEN [Employment Nature] = ‘Permanent’ THEN 1 
  ELSE 0 
  END) As [Total Employees],
   FROM [dbo].[Employee]

Kết quả của các báo cáo trên cho thấy 4 - công ty chỉ có 4 nhân viên cố định theo hồ sơ của họ trong Nhân viên bảng.

Hãy lấy một ví dụ khác về CASE với SUM () .

Trong khi khám phá trường hợp sử dụng 1, chúng tôi đã tìm thấy tổng chi phí dành cho nhân viên hợp đồng nhận được 100000 đô la trở lên trong phần trên trong trường hợp sử dụng 1. Bây giờ, chúng tôi muốn tìm số lượng nhân viên như vậy. Và, CASE biểu thức sẽ trở lại hình ảnh.

Chúng tôi có thể sử dụng CASE trong cùng một câu lệnh T-SQL được sử dụng trước đây. Dưới đây là ví dụ:

USE DBName
GO
SELECT SUM(Salary) As [Total Employees Cost],
SUM(CASE WHEN [Employment Nature] = ‘Contractor’ AND Salary >100000 THEN 1
ELSE 0
END) AS [Contractors Headcount]
FROM [dbo].[Employee]
WHERE [Employment Nature] = ‘Contractor’ AND Salary >100000
GO

Kết quả cho chúng ta thấy 2 nhà thầu đang làm việc và nhận được hơn $ 100000.

Bạn có thể sử dụng các khía cạnh khác nhau của CASE biểu thức trong SELECT cùng với SUM () chức năng để đáp ứng các nhu cầu kinh doanh của bạn.

Trường hợp Sử dụng 3:Hàm SUM trong SQL với GROUP BY

Giả sử rằng công ty của chúng tôi muốn biết tổng số tiền họ chi cho nhân viên cố định và bao nhiêu tiền công ty chi cho nhân viên hợp đồng. Chúng tôi có thể nhận tập hợp kết quả này bằng cách sử dụng SUM hoạt động cùng với GROUP BY tuyên bố.

Nhìn vào câu lệnh T-SQL bên dưới. Tôi đã sử dụng GROUP BY tuyên bố về Bản chất việc làm và đã áp dụng hàm SUM trên cột Lương để lấy tổng mức lương của từng loại nhân viên được phân loại theo tính chất công việc của họ.

USE DBName
GO
SELECT [Employment Nature], SUM(Salary) As [Total Employees Cost]
FROM [dbo].[Employee]
GROUP BY [Employment Nature]

Tập hợp kết quả cung cấp tổng số tiền chi cho các nhà thầu và nhân viên cố định. Nếu bạn thêm cả hai con số đó, tổng của chúng sẽ là tổng số tiền chi cho lương của nhân viên của họ (so sánh con số này với ảnh chụp màn hình đầu tiên của bài viết này).

SỬ DỤNG Trường hợp 4:Hàm SUM trong SQL với câu lệnh HAVING

Bây giờ, chúng ta sẽ cùng nhau khám phá cách sử dụng hàm SUM với các câu lệnh HAVING và GROUP BY. Ví dụ của chúng tôi sẽ hiển thị danh sách nhân viên nhận được hơn $ 150000 mỗi năm. Chúng ta có thể lấy nó bằng cách sử dụng câu lệnh SELECT với mệnh đề WHERE, nhưng tôi sẽ chỉ cho bạn cách nhận được kết quả tương tự với HAVING, GROUP BY và SUM.

Có 2 tập lệnh T-SQL. Đầu ra của cả hai câu lệnh đều giống nhau, nhưng tập lệnh đầu tiên sử dụng câu lệnh SELECT đơn giản, trong khi đoạn mã thứ hai sử dụng hàm SUM cùng với các mệnh đề GROUP BY và HAVING.

USE DBName
GO
SELECT name, salary
FROM [dbo].[Employee]
WHERE Salary >=150000
GO

--SUM with HAVING
SELECT name, SUM(salary) AS [Salary]
FROM [dbo].[Employee]
GROUP BY name HAVING SUM(salary) >=150000
GO

Xem kết quả đầu ra của cả hai tập lệnh:

Có một khía cạnh khác của việc sử dụng các câu lệnh này. Tôi đã chuyển các biểu thức số học trong hàm SUM để nhận được tiền thuê thuế chi phí của người lao động. Sau đó, tôi đã đăng ký GROUP BY ĐÃ CÓ tuyên bố về Mức lương cột. Nói một cách dễ hiểu, tôi muốn biết tổng chi phí thuê và thuế mà nhân viên có mức lương từ 150000 đô la trở lên đã chi.

Tôi cũng đã sử dụng hai truy vấn. Đầu tiên liệt kê chi tiết của tất cả nhân viên nhận được $ 150000 trở lên. Đầu ra này được tìm nạp chỉ để xác thực và xác minh. Cái thứ hai sử dụng SUM chức năng trên hai cột ( thuê thuế ) là tổng chi phí của họ. Sau đó, áp dụng GROUP BY ĐÃ CÓ mệnh đề:

USE DBName
GO
SELECT name, salary
FROM [dbo].[Employee]
WHERE Salary >=150000
GO

--SUM with HAVING and GROUP BY
SELECT name, SUM( rent + tax) AS [Total Expenses]
FROM [dbo].[Employee]
GROUP BY name HAVING SUM(salary) >=150000
GO

Hãy phân tích kết quả đầu ra. Truy vấn đầu tiên hiển thị tất cả thông tin chi tiết của nhân viên có mức lương từ $ 150000 trở lên. Bây giờ, hãy xem kết quả truy vấn thứ hai. Ở đây, chúng tôi đã lấy các nhân viên và chi phí của họ dựa trên mức cắt lương của họ là $ 150000 trở lên. Bằng cách này, chúng tôi đã xác minh rằng truy vấn của chúng tôi với các mệnh đề SUM, GROUP BY và HAVING trả về kết quả chính xác.

Trường hợp sử dụng 5:Hàm SUM trong SQL với nhiều biểu thức số học

Hàm SUM mang lại sự linh hoạt tuyệt vời khi nói đến các biểu thức số học. Chúng ta có thể sử dụng nhiều biểu thức số học, chẳng hạn như cộng hoặc trừ giữa nhiều giá trị cột khi cần thiết. Hãy tham khảo một ví dụ.

Chúng tôi muốn đưa ra một báo cáo về tổng số tiền tiết kiệm được của nhân viên. Có thể có nhiều cột chi phí hoặc phụ cấp khác nhau, chẳng hạn như trợ cấp tiền thuê nhà, phụ cấp đi lại, trợ cấp ăn uống, v.v. Bảng của chúng tôi Nhân viên có hai cột liên quan đến chi phí của nhân viên - tiền thuê chỗ ở và thuế trả cho chính phủ. Bạn có thể hiểu khái niệm và áp dụng nó cho nhiều cột hơn theo cách tương tự.

USE DBName
GO
--List table data for reference
SELECT *
FROM [dbo].[Employee]
GO

--SUM with multiple arithmetic expressions
SELECT name, SUM(salary – (rent + tax)) AS [Total Savings]
FROM [dbo].[Employee]
GROUP BY name
GO

Truy vấn đầu tiên hiển thị tất cả dữ liệu từ bảng Nhân viên . Chúng tôi sẽ sử dụng dữ liệu này làm tham chiếu để xác minh sản lượng thực tế của chúng tôi được trả về bởi truy vấn thứ hai về tổng số tiền tiết kiệm được cho mỗi nhân viên.

Chúng tôi đã có được điều này bằng cách cộng tất cả các khoản chi phí và sau đó trừ tất cả các khoản chi phí từ tiền lương của nhân viên như được đưa ra trong SUM câu lệnh hàm. Bạn có thể xác minh nó bằng cách tính toán thủ công dữ liệu này từ tập hợp kết quả đầu tiên cho bất kỳ nhân viên nào để xác thực nó.

Kết luận

Chúng tôi đã khám phá nhiều trường hợp sử dụng của hàm SUM trong SQL với các mệnh đề khác. Nhân tiện, các công cụ kỹ thuật số hiện đại dành cho các chuyên gia SQL Server có thể đơn giản hóa các tác vụ này một cách đáng kể. Ví dụ:dbForge SQL Complete bao gồm một tính năng có thể tính toán các hàm tổng hợp từ tập kết quả sẵn sàng trong lưới kết quả SSMS.

Bạn có thể chia sẻ các mẹo yêu thích của mình liên quan đến hàm SUM trong SQL. Bạn có thể sử dụng phần Nhận xét.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server RAISERROR là gì?

  2. Cách tạo thả các tập lệnh Ràng buộc Duy nhất trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 99

  3. Kết nối với SQL Server LocalDB bằng JDBC

  4. Tìm mối liên hệ giữa tài khoản thư cơ sở dữ liệu và nguyên tắc cơ sở dữ liệu trong SQL Server (T-SQL)

  5. Cách lấy Chuỗi kết nối từ cơ sở dữ liệu