SQL 中的聚合函數及其用法

SQL 中的聚合函數及其用法

在本教程中,我們將討論SQL 中的不同聚合函數以及我們如何使用它們。在 SQL 中,聚合函數用於將多行數據累積到單個匯總行中。 

SQL 中的聚合函數對分析人員進行數據匯總非常有幫助。

目錄

SQL中常用的聚合函數

下面顯示的是SQL 中一些常用的聚合函數。

SQL 中的聚合函數及其用法

請注意,和函數通常用於貨幣或整數值。AVG 函數不僅返回平均值,還返回列的平均值。此外,聚合函數是唯一一個在執行計算時不忽略空值的函數。

讓我們使用我們的五個聚合函數和下面的示例表來製作一些示例命令。

SQL 中的聚合函數及其用法

首先,讓我們使用MAX 函數創建一個命令。假設我們要在 ProductName列下找到價值最高的產品我們的命令應該類似於下圖。

SQL 中的聚合函數及其用法

由於我們正在尋找價值最高的產品,因此我們需要獲取其價格,該價格位於ProductPrice列下。始終使用別名為輸出列提供名稱。如果我們執行該命令,它將向我們顯示只有一個值的最高價值產品。 

接下來,讓我們使用MIN 函數創建一個命令。由於MIN 函數與MAX 函數有些相似,我們將僅使用與MAX 函數中相同的示例,但這次,我們將找到最低值的產品。

SQL 中的聚合函數及其用法

當我們執行此命令時,它將獲取示例表中價值最低的產品。

現在,讓我們使用COUNT 函數創建一個命令。假設我們要在ProductID列下查找產品的數量。我們的命令應該類似於下圖。

SQL 中的聚合函數及其用法

如果我們執行此命令,它將在ProductID列下顯示每個產品的數量 及其各自的價格。

聚合函數和 GROUP BY 子句

現在,讓我們討論如何使用具有聚合函數的多列。為此,我們需要使用GROUP BY 子句

GROUP BY 函數主要用於聚合函數,因為它從每個組返回一條記錄。此外,即使沒有聚合,SELECT 語句中的所有列仍應包括在內。

讓我們在下面的示例表中討論如何將聚合函數與 GROUP BY 子句一起使用。

SQL 中的聚合函數及其用法

首先,讓我們嘗試在不使用 GROUP BY 子句的情況下執行命令以查看差異。讓我們在ProductName 列中查找總SaleAmount。我們的命令應該類似於下圖。

SQL 中的聚合函數及其用法

如您所見,該命令類似於我們在本教程開頭提到的先前示例。一旦我們執行此命令,它將簡單地計算SaleAmount列下的總金額,即28

現在,讓我們來看另一個使用GROUP BY 子句的例子。 

SQL 中的聚合函數及其用法

由於我們使用GROUP BY 子句,我們現在可以使用多列。這一次,我們想要查看每個類別的總SaleAmount

GROUP BY 子句將確保結果顯示每個類別的銷售額總和,如果執行,結果將如下圖所示。

在此示例中,使用 GROUP BY 子句很重要,否則會發生錯誤。這是因為Category不包含在 GROUP BY 子句或聚合函數中。

SQL 中的聚合函數及其用法

讓我們使用相同的示例,但這一次,我們還將通過ProductName獲取總SaleAmount。我們的命令應該類似於下圖。

SQL 中的聚合函數及其用法

執行命令後,結果將顯示每個類別ProductName的銷售額總和。

SQL 中的聚合函數及其用法

請記住,您不能在不使用GROUP BY 子句的情況下使用或訪問多個列,因為如果您這樣做,一旦您運行命令,它將導致錯誤。

SQL Server Management Studio (SSMS) 中的聚合函數

現在讓我們討論如何在SQL Server Management Studio中使用聚合函數。我們將在示例中使用下表。

SQL 中的聚合函數及其用法

我們的SalesOrderHeader表中有31,465 行數據。對於我們的第一個示例,我們將演示如何通過計算表中的行數來使用COUNT函數。我們的命令應該如下圖所示。

SQL 中的聚合函數及其用法

我們已經成功計算了 SalesOrderHeader 中的所有行並將其命名為countofrows。執行此命令後,我們將得到31,465 的結果。

讓我們回到我們的數據集。在使用相同的聚合函數的同時,讓我們計算表中有多少個SalesPersonID 。我們的命令應該是:

SQL 中的聚合函數及其用法

當我們執行我們的命令時,它會專門獲取SalesPersonsID列下的數據,並會給我們一個名為countofsalespersons的列,結果為3806

SQL 中的聚合函數及其用法

在單個查詢中使用聚合函數

繼續,讓我們討論如何在單個查詢中使用多個聚合函數。我們將使用SUMAVGMAX 函數來聚合我們的列TotalDueTaxAmt。 

SQL 中的聚合函數及其用法

我們可以在單個查詢中 使用多個聚合函數,方法是在每個函數後放置一個逗號。

SQL 中的聚合函數及其用法

執行此命令後,我們的結果應如下圖所示。 

SQL 中的聚合函數及其用法

現在,我們可以使用多個聚合函數查看不同的列及其各自的值。 

讓我們嘗試執行一個會導致錯誤的命令,以強調為什麼我們在選擇列時應該使用GROUP BY 子句。我們將使用使用多個函數的相同示例,但這次我們將選擇CustomerID

SQL 中的聚合函數及其用法

如您所見,它表示該命令無效,因為CustomerID未包含在聚合函數GROUP BY 子句中。

使用 GROUP BY 子句的示例場景

對於我們的下一個示例,讓我們通過在命令中提供GROUP BY 子句來修復我們的錯誤。

SQL 中的聚合函數及其用法

我們剛剛在GROUP BY 子句中添加了CustomerID ,現在我們可以按CustomerID 查看TotalDueTaxAmt的總和、平均值和最大值我們還可以看到我們總共有19119 行

讓我們通過討論為什麼確保非聚合列和表達式包含在GROUP BY 子句中對我們很重要來使用我們的最後一個示例。

在我們的SalesOrderHeader表中,我們有OrderDate列。假設我們想要按年獲得TotalDue的總和。如果我們不指示所有非聚合列和表達式,我們需要使用下圖中的命令。

SQL 中的聚合函數及其用法

請注意我們如何能夠得到結果而不是錯誤。但是,當我們的目標是每年將報告匯總為一個特定值時,我們在同一年有多個報告。

為了糾正我們的錯誤,我們必須確保我們也將表達式包含在我們的GROUP BY 子句中。我們的新命令應該是:

SQL 中的聚合函數及其用法

執行命令後,我們可以看到我們已經成功獲取了每年 OrderDate的總和。

SQL 中的 HAVING 子句聚合函數
SQL 中的存儲過程 | 在 LuckyTemplates 中使用 GROUPBY 函數的有效方法概述

結論

總而言之,您已經了解了有關在 SQL 中使用聚合函數的一些基本知識。聚合函數在處理大型報告或數據集時非常理想,因為它們在數據分析和匯總期間為分析師提供了便利。 

希望本教程可以幫助您更好地練習在 SQL 中使用不同的聚合函數。如果您想了解有關此主題和其他相關內容的更多信息,您當然可以查看下面的相關鏈接列表。

一切順利,

哈菲茲


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的