SQL Server 數據庫設計--SELECT高級查詢語句之三

在前幾篇文章中介紹了 SQL SERVER 數據庫的設計,以及 SELECT 語句的簡單使用方法,這篇文章繼續介紹其他高級查詢方法。

SQL Server 數據庫設計--SELECT高級查詢語句之三

首先要介紹的就是分組查詢。比如我們有一個銷售訂單,這個訂單裡包含了地域,人員等多個不同的字段信息,我們需要按照地域進行分組查詢每個地域的總銷售額。或者要按照人員查詢每個人的銷售總額等信息,那麼就需要用到這個分組查詢的功能。

  1. 分組查詢 GROUP BY

使用 GROUP BY 根據一個或者多個列對結果進行分類彙總,通常和統計函數一起使用,常用的統計類函數有:

COUNT(統計組中項數) / COUNT (*),SUM,AVG,MAX,MIN等。

語法結構如下:

SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE search_condition
GROUP BY group_by_expression;

示範數據庫表:

SQL Server 數據庫設計--SELECT高級查詢語句之三

GROUP BY 實例:查詢各個城市總的銷售額是多少;

SELECT Country, SUM(sales) AS TotalSales FROM Sales GROUP BY Country;

查詢結果如下:

SQL Server 數據庫設計--SELECT高級查詢語句之三

從上面我們可以看出,GROUP BY 將城市名稱相同的銷售額聚集在一起,然後通過 SUM() 聚合函數計算出他們的總和。

重點:GROUP BY 主要作用是用來進行分組聚合查詢,有時候會用來進行排重,與 DISTINCT 關鍵字作用類似。常與 HAVING 關鍵字一起使用,用來對分組結果進行篩選。

注意: GROUP BY 子句中必須保證 SELECT 語句後列值是可計算的或者在 GROUP BY 列表中。

下面語句會報錯:

SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales GROUP BY Country;
SQL Server 數據庫設計--SELECT高級查詢語句之三

2. 統計查詢 HAVING

篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚組函數,使用 having 條件過濾出特定的組,也可以使用多個分組標準進行分組。

語法結構如下:

SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE search_condition
GROUP BY group_by_expression
HAVING search_condition
ORDER BY order_ expression [ASC] | [DESC] ;

示範數據庫表:

SQL Server 數據庫設計--SELECT高級查詢語句之三

HAVING 實例:

1)以城市進行分組查詢總的銷售額是多少並以城市為“Canada”組為過濾條件;

SELECT Country, SUM(sales) AS TotalSales FROM Sales 
GROUP BY Country
HAVING Country = 'Canada'
SQL Server 數據庫設計--SELECT高級查詢語句之三

2)以城市進行分組查詢總的銷售額是多少並以累計銷售額大於100為過濾條件;

SELECT Country, SUM(sales) AS TotalSales FROM Sales 
GROUP BY Country
HAVING SUM(sales) > 300
SQL Server 數據庫設計--SELECT高級查詢語句之三

從上面可以看出通過 HAVING 進行過濾後,查詢到的結果和第一項中查詢到的結果不同了。

那麼 WHERE 也是過濾條件,它和 HAVING 有什麼區別呢?

區別:where 子句的作用是在對查詢結果進行分組前,將不符合 where 條件的行去掉,即在分組之前過濾數據,where 條件中不能包含聚組函數,使用 where 條件過濾出特定的行。

那麼我們來看看一下兩條語句的區別:

SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales 
GROUP BY Country, Region
HAVING SUM(sales) >= 100;
SQL Server 數據庫設計--SELECT高級查詢語句之三

SELECT Country, Region, SUM(sales) AS TotalSales FROM Sales 
WHERE Country ='Canada'
GROUP BY Country, Region
HAVING SUM(sales) >= 100;
SQL Server 數據庫設計--SELECT高級查詢語句之三

更多 SQL Server 數據庫知識以及報表設計方法,請關注我的專欄,獲取更多的幫助。


分享到:


相關文章: