1. 程式人生 > >解決SQL分組聚合函式問題

解決SQL分組聚合函式問題

今天要做一個查詢統計功能,一開始有點犯難,上午嘗試大半天才寫出統計sql語句,才發現自己sql分組查詢及聚集函式沒學好;其實就是group by子句和幾個聚集函式,熟練使用統計功能很簡單。在此總結下今天查詢統計是用到的幾個sql函式。

SQL聚集函式

sum函式 sum函式用於計算查詢表中指定欄位中所有 記錄值的總和。 語法:sum(exp) 說明:該函式不計算包含Null 值的欄位。

例:SELECT SUM(population) FROM bbc 這裡的SUM作用在所有返回記錄的 population欄位上,結果就是該查詢只返回 一個結果,即所有國家的總人口數。

avg函式 Avg函式是用來計算特定查詢欄位中的一組數值的 算術平均值(將全部值的總和除以值的數目)。

語法:avg(exp) 說明:該函式只能對數值型別的欄位進行計算。 例:求所有僱員薪水的平均值。 SELECT AVG(emp_salary) FROM employee;

count函式 count函式是用來計算查詢表中的記錄數。 語法:count(exp) 說明:count函式不計算具有Null欄位的記錄,但如 果將exp設定為星號(*),則count函式將計算所有記 錄的總量,包括有Null的欄位的記錄。Distinct短句可以取消指定列中的重複值 sql除了不允許對count(*)使用distinct,對其 餘情況都能用distinct,但一般情況下是沒有 必要用的,除非你覺得的確是需要用distinct。

min函式 min函式是用來從查詢表中返回指定欄位中 的最小值。 語法:min(exp)

max函式 max函式是用來從查詢表中返回指定欄位中 的最大值。 語法:max(exp)

GROUP BY子句

對記錄的分組是通過關鍵字 GROUP BY 實現的, GROUP BY 後面跟著一個定義組的構成的屬性列 表。 如果我們使用語句 GROUP BY A1,……, Ak 我們就把關係分成了組,這樣當且僅當兩條記錄 在所有屬性 A1,……, Ak 上的值達成一致,它們才 是同一組的。 SQL 允許我們把一個表裡面的記錄用GROUP BY 分成組。 然後上面描述的聚集操作符可以應用於 這些組上 (也就是說,聚集操作符的值不再是對 所有宣告的列的值進行操作, 而是對一個組的所 有值進行操作。這樣聚集函式是為每個組獨立地 進行計算的

。)

當在查詢中沒有使用GROUP BY子句時,資料庫就把資料表 中的所有行為作為一個組來處理。通常情況下,我們並不希 望是這樣的。多數使用者都能理解組的概念,但在使用的時候 卻很快就陷入 麻煩中。有一個技巧是:如果有一列在 GROUP BY子句中沒有提到,就必須對它進行累計。換句話 說,就是必須對select中那些不包括在GROUP BY子句中的所有列使 用上面提到過的一個函式。

請注意如果要讓一個使用 GROUP BY 和聚集操 作符的查詢的結果有意義, 那麼用於分組的屬性 也必須出現在目標列表中。 所有沒有在 GROUP BY 子句裡面出現的屬性都只能通過使用聚集函式 來選擇。 否則就不會有唯一的數值與其它欄位關 聯. 還要注意的是在聚集上聚集是沒有意義的,比如, AVG(MAX(sno)), 因為 SELECT 只做一個回合 的分組和聚集.你可以獲得這樣的結果, 方法是 使用臨時表或者在 FROM 子句中使用一個子 SELECT 做第一個層次的聚集。

總結:

在帶有group by 子句的查詢語句中,在select 列表中指定的列要麼是group by 子句中指定的列,要麼包含聚組函式

查詢語句的select group by ,having 子句是聚組函式唯一出現的地方,在where 子句中不能使用聚組函式。

當在gropu by 子句中使用having 子句時,查詢結果中只返回滿足having條件的組。在一個sql語句中可以有where子句和having子句。having where 子句類似,均用於設定限定條件。where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾資料,條件中不能包含聚組函式,使用where條件顯示特定的行。having 子句的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚組函式,使用having 條件顯示特定的組,也可以使用多個分組標準進行分組。

用到的其它函式:

1、CHARINDEX (<'substring_expression'>, <expression>)其中substring _expression 是所要查詢的字元表示式,expression 可為字串也可為列名錶達式。如果沒有發現子串,則返回0 值。此函式不能用於TEXT 和IMAGE 資料型別。

2、CONVERT (<data_ type>[ length ], <expression> [, style])

1)data_type為SQL Server系統定義的資料型別,使用者自定義的資料型別不能在此使用。

2)length用於指定資料的長度,預設值為30。

3)把CHAR或VARCHAR型別轉換為諸如INT或SAMLLINT這樣的INTEGER型別、結果必須是帶正號或負號的數值。

4)TEXT型別到CHAR或VARCHAR型別轉換最多為8000個字元,即CHAR或VARCHAR資料型別是最大長度。

5)IMAGE型別儲存的資料轉換到BINARY或VARBINARY型別,最多為8000個字元。

6)把整數值轉換為MONEY或SMALLMONEY型別,按定義的國家的貨幣單位來處理,如人民幣、美元、英鎊等。

7)BIT型別的轉換把非零值轉換為1,並仍以BIT型別儲存。

8)試圖轉換到不同長度的資料型別,會截短轉換值並在轉換值後顯示"+",以標識發生了這種截斷。

9)用CONVERT() 函式的style 選項能以不同的格式顯示日期和時間。style 是將DATATIME 和SMALLDATETIME 資料轉換為字串時所選用的由SQL Server 系統提供的轉換樣式編號,不同的樣式編號有不同的輸出格式。

相關推薦

解決SQL分組聚合函式問題

今天要做一個查詢統計功能,一開始有點犯難,上午嘗試大半天才寫出統計sql語句,才發現自己sql分組查詢及聚集函式沒學好;其實就是group by子句和幾個聚集函式,熟練使用統計功能很簡單。在此總結下今天查詢統計是用到的幾個sql函式。 SQL聚集函式 sum函式 sum函式用於計算查詢表中指定欄位中所有

SQL聚合函式分組、子查詢及組合查詢用法

聚合函式: SQL中提供的聚合函式可以用來統計、求和、求最值等等。 分類: –COUNT:統計行數量 –SUM:獲取單個列的合計值 –AVG:計算某個列的平均值 –MAX:計算列的最大值 –MIN:計算列的最小值 首先,建立資料表如下:

SQL Server 聚合函式分組學習(group by)

一、SQLServer裡面的常用的五種聚合函式。 1.Sum(和)-—對於NULL值預設為0 2.MAX(最大值)MIN(最小值) 3.AVG (平均值)—不統計空值,例如存在有四個人,但是隻有三個人有成績,平均成績為:總和/3 4.COUNT(數量) --統計所有人分數總和

SQL語句聚合函式分組、子查詢及組合查詢

執行列、行計數(count): 標準格式 SELECT COUNT(<計數規範>) FROM <表名> 其中,計數規範包括: - * :計數所有選擇的行,包括NULL值; - ALL 列名:計數指定列的所有非空值行,如果不寫,預設為ALL; - DISTINCT 列名:計數

SQL Server聚合函式聚合開窗函式

以下面這個表的資料作為示例。 什麼是聚合函式? 聚合函式:聚合函式就是對一組值進行計算後返回單個值(即分組)。聚合函式在計算時都會忽略空值(null)。 所有的聚合函式均為確定性函式。即任何時候使用一組相同的輸入值呼叫聚合函式執行後的返回值都是相同的,無二義性。 COUNT(統計函式):COUNT

SQL學習——聚合函式

Aggregate functions 聚合函式 從一組值計算單個結果集。 一.理論 1.COUNT 統計個數 SELECT COUNT(*) FROM fake_apps WHERE price=0; 2.SUM SELECT SUM(downloads)

SQL Server聚合函式總結

聚合函式對一組值計算後返回單個值。除了count(統計項數)函式以外,其他的聚合函式在計算式都會忽略空值(null)。所有的聚合函式均為確定性函式。即任何時候使用一組相同的輸入值呼叫聚合函式執行後的返回值都是相同的,無二義性。T-SQL提供的聚合函式一共有13個之多。   

sql聚合函式使用總結

Having是一個經常與聚合函式搭配使用的關鍵字。它的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚合函式什麼是聚合函式?聚合函式一般會出現在哪?顧名思義,聚合函式就是按照某種規則將特定欄位進行規約,常見的聚合函式如:(1)求個數:count(2)求總和:su

記錄下mysql的分組聚合函式group by

今天維護客戶的儲存過程時發現一個問題,連鎖客戶只有銷售明細表,沒訂單表,而公司要求寫查詢訂單的儲存過程,客戶那邊使用的資料是SQLserver,我使用了分組聚合函式group by ; 例如:這樣子寫SQLserver會報錯,因為group by 要求查詢的欄位也得包含在聚

sql使用聚合函式查詢多列問題

常用的聚合函式 COUNT():統計指定列不為NULL的記錄行數; MAX():計算指定列的最大值,如果指定列是字串型別,那麼使用字串排序運算; MIN():計算指定列的最小值,如果指定列是字串型別,那麼使用字串排序運算; SUM():計算指定列的數值和,如果指定列型

SQL Server彙總資料之聚合函式分組

在SQL查詢的邏輯流程中,聚合函式是在From子句和Where子句之後執行的,這 意味著無須使用子查詢就可以在彙總(使用聚合函式)前對資料進行組裝和篩選。 基本聚合(函式) 聚合函式 支援的資料型別 描述 sum( ) Numeric 計算指定列中所有非空值的總和 avg() numeric 計算指定列中所

SQL查詢入門---聚合函式的使用和資料的分組

簡介       簡單的說,聚合函式是按照一定的規則將多行(Row)資料彙總成一行的函式。對資料進行彙總前,還可以按照特定的列(column)將資料進行分組(Group by)再彙總,然後按照再次給定的條件進行篩選(Having).       聚合函式將多行資料進行彙總的概念可以簡單用下圖解釋:     

SQL語句學習(2)之基本查詢、排序、聚合函式分組查詢

一、 基本查詢 1. 欄位(列)控制 1) 查詢所有列  SELECT * FROM 表名;  SELECT * FROM emp;  --> 其中“*”表示查詢所有列 2) 查詢指定列  SELECT 列1 [, 列2, ... 列N] FROM 表名;  SEL

SQL基礎整理(三)關於聚合函式分組,排序

一.關於聚合函式 首先常用的聚合函式有count,sum,avg,max,min 這些函式的功能不再贅述,只是有一些需要注意的地方 注意事項:除了count(*)是對所有行進行統計之外,其餘的聚合函式再以列名做引數時,會把該列為NULL的排除在外,不會參與到計算當中

資料分組聚合函式

到目前為止我們使用的聚合函式都是對普通結果集進行統計的,我們同樣可以使用聚合函式來對分組後的資料進行統計,也就是統計每一個分組的資料。我們甚至可以認為在沒有使用GROUP BY語句中使用聚合函式不過是在一個整個結果集是一個組的分組資料中進行資料統計分析罷了。 讓我們來看一下“檢視每個年齡段的員工的人數”如何

sparksql的agg函式,作用:在整體DataFrame不分組聚合

1、 agg(expers:column*) 返回dataframe型別 ,同數學計算求值 df.agg(max("age"), avg("salary")) df.groupBy().agg(max("age"), avg("salary")) 2、 agg(exprs: Map[String,

$Django 聚合函式分組查詢、F,Q查詢、orm欄位以及引數

    一.聚合函式     from django.db.models import Avg,Sum,Max,Min,Count,F,Q   #匯入     # .查詢圖書的總價,平均價,最大

sqlserver 模糊查詢,連表,聚合函式,分組

1 use StudentManageDB 2 go 3 select StudentName,StudentAddress from Students 4 where StudentAddress like '天津%' 5 6 select StudentName,StudentAddr

SQL Server資料庫————模糊查詢和聚合函式

***********模糊查詢*********/ 關鍵字: like (!!!!字串型別) in (,,)  匹配()內的某個具體值(括號裡可以寫多個值) between... and.. 在某兩個值的區間範圍中(前後都包括,小的寫前面,大的寫後面)   *****

SQL Server 效能優化實戰系列(一) SQL Server擴充套件函式的基本概念 使用SQL Server 擴充套件函式進行效能優化 SQL Server Url正則表示式 記憶體常駐 完美解決方案

資料庫伺服器主要用於儲存、查詢、檢索企業內部的資訊,因此需要搭配專用的資料庫系統,對伺服器的相容性、可靠性和穩定性等方面都有很高的要求。        下面是進行籠統的技術點說明,為的是讓大家有一個整體的概念,如果想深入可以逐個擊破;&n