當前位置:首頁 » 編程語言 » sql聚合函數可出現在查詢子句
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql聚合函數可出現在查詢子句

發布時間: 2023-04-03 23:41:19

sql 語句中那些是聚合函數

常見聚合函數,max(最大)、min(最小)、sum(求和)、avg(平均)等,

示例如下,

1、創建測試表,

create table test_group(id number, value number);

Ⅱ 一文講懂SQL子查詢

大家好,我是寧一。


今天講解SQL教程第18課:子查詢。


SQL語句可以嵌套,最常見的就是查詢語句的嵌套。


基本語法:



我們一般稱外面嵌套的語句為主查詢,裡面被嵌套的語句為子查詢,有時也會叫外查詢、內查詢,大家知道意思就好。


子查詢要用括弧括起來。子查詢不僅可以放在WHERE的後面,還可以放在SELECT、FROM的後面,我們一個個來講解。


1、子查詢+WHERE子句


SQL執行時,會先執行括弧內的子查詢,子查詢最常與WHERE子句結合使用。子查詢的結果作為WHERE子句的篩選條件,完成更復雜的數據檢索。


實例: 在Students表中,找出所有在"寧一"後面出生的學生。



實例解析: 需要先確定"寧一"的生日,再將生日作為WHERE篩選條件,得到最終數據。


第一步:找到"寧一"的生日




第二步:將生日作為WHERE篩選條件,得到最終數據,子查詢語句要用括弧括起來。






SELECT語句的子查詢經常與聚合函數結合使用。因為我們使用聚合函數的時候,記錄會合成一條,其它數據細節就不能顯示了。


比如: 我們想要查看學生表中所有的學生姓名、學生生日、學生的最大生日。


示例結果:



錯誤寫法:



像上面這樣寫是會報錯的,因為聚合函數與其他表中的列(Sname,Sage),同時放在SELECT的後面。需要用GROUP BY語句將這些表中的列(Sname,Sage)分組。


上面的語句後面加上 GROUP BY Sname,Sage 就可以了。


但是這樣寫,會將每組的數據聚合成1條數據,比如每組有3條數據,使用聚合函數MAX()+GROUP BY,最終每組只會顯示1條最大值的數據。


我們需要展現Students表中所有的學生,這樣寫不能滿足我們的需求。


正確寫法: 結合子查詢來實現。




子查詢與FROM子句結合使用,子查詢結果被當成了一個「表」,可以用SELECT語句做進一步的篩查。


比如:我們先寫一個SELECT查詢語句




將上面的查詢語句放在FROM的後面,則上面查詢到的結果,就會被當成一個「表」。



這里有一個特別要注意的地方,放在FROM後面的子查詢,必須要加別名。



復雜的子查詢再嵌套進 FROM 里會讓整個查詢看起來過於復雜,我們一般會將子查詢結果儲存為視圖,然後再直接使用視圖作為來源表,視圖會SQL高階課程中詳細講解。


其實子查詢就是查詢語句嵌套,沒有什麼新的東西,只是多了一個層級,由內向外地一層層梳理就會很清楚了。


作業: 結合Students表,從Teachers表中找出當班主任的老師(通過子查詢實現)。



作業解析: 先從Students表中,找出所有班主任的Tid並去重,將查詢結果作為篩選條件,放在WHERE語句中。



Ⅲ 第十二章 SQL聚合函數 VARIANCE, VAR_SAMP, VAR_POP

返回數據集統計方差的聚合函數。

這些函數返回 NUMERIC 數據類型,除非表達式是數據類型 DOUBLE 。
如果 expression 為 DOUBLE ,則返回 DOUBLE 。

這三個方差聚合函數在丟棄 NULL 值後返回表達式值的統計方差。
也就是說,從數據集的平均值變化的量,表示為一個正數。
返回值越大,值的數據集的變化就越大。
SQL還提供聚合函數來返回對應於每個方差函數的標准偏差。

在這種統計差異的推導過程中有一些細微的差異:

方差計算為:

VAR_POP 的計算是:

這些方差聚合函數可以在引用表或視圖的 SELECT 查詢或子查詢中使用。
它們可以在 SELECT 列表或 HAVING 子句中與普通欄位值一起出現。

這些方差聚合函數不能在WHERE子句中使用。
它們不能在 JOIN 的 ON 子句中使用,除非 SELECT 是子查詢。

這些方差聚合函數返回數據類型NUMERIC的值,精度為 36 ,刻度為 17 ,除非表達式是數據類型 DOUBLE ,在這種情況下,函數返回數據類型 DOUBLE 。

這些方差聚合函數通常應用於具有數值的欄位或表達式。
它們將非數值值(包括空字元串( " ))計算為零( 0 )。

這些方差聚合函數忽略數據欄位中的 NULL 值。
如果查詢沒有返回行,或者返回的所有行的數據欄位值為 NULL ,則返回 NULL 。

與所有聚合函數一樣,統計方差函數可以採用一個可選的 DISTINCT 子句。
方差( DISTINCT col1 )返回那些不同(唯一)的 col1 欄位值的方差。
方差( DISTINCT BY(col2) col1 )返回記錄中col1欄位值的方差,其中col2值是不同的(唯一的)。
但是請注意,不同的col2值可能包含一個單獨的NULL值。

與所有聚合函數一樣,方差函數總是返回數據的當前狀態,包括未提交的更改,而不管當前事務的隔離級別如何。

下面的示例使用方差返回 sample.employee 中雇員年齡的方差,以及由一個或多個雇員表示的不同年齡的方差:

下面的示例使用 VAR_POP 返回 sample.employee 中雇員年齡的總體差異,以及由一個或多個雇員表示的不同年齡的差異:

Ⅳ 為什麼聚集函數不能出現在where子句中

count()是一個聚集函數(也稱為聚合函數)是為了選定行的數目,可以包含空值。group by 是分組, 可以按照一個多多個欄位分組。 使用時應注意:select 後顯示的信息:要麼包含在聚集函數中,要麼包含在group by 子句中。where :是一個條件語句,在where後面跟的是條件!

Ⅳ sql中表示查詢條件的子句有where和什麼

from:從哪些表中篩選
where:從表中篩選的條件
group by:分組依據
having:在統計結果中再次篩選
order by:排序
limit:分頁
having與where的區別在於,where是從表中篩選的條件,而having是統計結果中再次篩選。也就是說where後面不能加「分組/聚合函數」,而having後面則可以。

Ⅵ sql聚合函數的應用

我們知道資料庫通常包含大量數據,要從海量的數據中找到我們需要的某條記錄無異於大海撈針,不過通過SQL語言我們可以找到很多方法從資料庫中提取我們要查找的特定數據,就是通過這些方法我們才能找到「列舉出七八兩個月中購買了西伯利亞羊毛的所有顧客的姓名」這類問題的答案。很多時候,我們還希望能夠通過對數據進行分析,總結出規律和趨勢或生成高水平的報表。例如,對於采購經理來說,他可能對所有銷售出去的產品清單不感興趣,而只是想要知道這個月產品的銷售量。SQL提供了聚合函數(aggregate functions)功能來支持對大量數據進行總結的操作。本文我們將具體來看看這些函數的功能和用法,包括添加數據和計算平均值的函數、對符合特定標準的記錄進行計數的函數,以及找出表中最大值和最小值的函數。我們將使用下文所示的ProctOrder表來執行我們所有的查詢。注意,這個表並沒有標准化,而是將幾個數據實體聯合到一個表中,這樣做是為了簡化條件方便說明。如果要設計較好的關系資料庫,應當把這些內容至少分成三個關聯表Procts、Orders和Customers。訂單號 客戶名 客戶姓 數量 單價 所在地 122 John Jacob 21 4.52 北美洲 923 Ralph Wiggum 192 3.99 北美洲 238 Ryan Johnson 87 4.49 非洲 829 Mary Smith 842 2.99 北美洲 824 Elizabeth Marks 48 3.48 非洲 753 James Linea 9 7.85 北美洲 942 Alan Jonas 638 3.29 歐洲 我們先從SUM函數開始。這個函數通常在SELECT語句中使用,返回系列值的總數。假設產品項目經理想了解目前為止商品的總銷售額,那麼我們可以使用以下的查詢腳本:SELECT SUM(數量) AS 總數 FROM ProctOrders 執行語句將返回以下結果: Total ----------- 1837 AVG函數(平均函數)使用方法和SUM類似,它給我們提供系列值的算術平均數。這次我們可以嘗試稍微復雜點的任務:找出北美洲大陸所有訂單的金額平均值。注意,我們需要將「數量」列和「單價」列相乘計算出每張訂單的金額總數。查詢腳本如下: http://database.ctocio.com.cn/tips/116/8051116.shtml

Ⅶ SQL中where語句能用聚合函數嗎

聚合函數應該用在having子句中。

聚合函數如果沖櫻想用在where中的話,應該只塌粗能用子查詢來實現(在子查詢中進行聚合函數計算,然後在主查詢中進行where判斷)團判鎮。

Ⅷ SQL中只要用到聚合函數就一定要用到group by 嗎

SQL中只要用到聚合函數就不一定要用到group by。聚合函數是對一組值執行計算,並返回單個值,也被稱為組函數。 聚合函數可以應用於SELECT 查詢語句的 GROUP BY 子句的HAVING子句中,但不可用於WHERE語句中,因為WHERE是對逐條的行記錄進行篩選。

(8)sql聚合函數可出現在查詢子句擴展閱讀:

Transact-SQL編程語言提供的聚合函數有:

1、AVG:返回指定組中的平均值,空值被忽略。例:select prd_no,avg(qty) from sales group by prd_no.

2、COUNT:返回指定組中項目的數量。例:select count(prd_no) from sales.

3、COUNT_BIG:返回指定組中的項目數量,與COUNT函數不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。例:select count_big(prd_no) from sales.

4、MIN:返回指定數據的最小值。例:select prd_no,min(qty) from sales group by prd_no.

5、MAX:返回指定數據的最大值。例:select prd_no,max(qty) from sales group by prd_no.


Ⅸ sql聚合函數的應用

聚合函數對一組值執行計算,並返回單個值。除了
COUNT
以外,聚合函數都會忽略空值。聚合函數經常與
SELECT
語句的
GROUP
BY
子句一起使用。
所有聚合函數均為確定性函數。也就是說,只要使用一組特定輸入值調用聚合函數,該函數總是返回相同的值。有關函數確定性的詳細信息,請參閱確定性函數和不確定性函數。
聚合函數只能在以下位置作為表達式使用:
SELECT
語句的選擇列表(子查詢或外部查詢)。
COMPUTE

COMPUTE
BY
子句。
HAVING
子句。
Transact-SQL
提供下列聚合函數:
AVG
MIN
CHECKSUM
SUM
CHECKSUM_AGG
STDEV
COUNT
STDEVP
COUNT_BIG
VAR
GROUPING
VARP

Ⅹ 第十章 SQL聚合函數 STDDEV, STDDEV_SAMP, STDDEV_POP

返回數據集的統計標准差的聚合函數。

除非表達式的數據類型為 DOUBLE ,否則這些函數將返回數字數據類型。如果表達式為 DOUBLE ,則返回 DOUBLE 。

這三個標准差聚合函數在丟棄NULL值後返回表達式值分布的統計標准差。
也就是說,從數據集的平均值的標准差的量,表示為一個正數。
返回值越大,值的數據集的變化就越大。

STDDEV、STDDEV_SAMP (sample) 和 STDDEV_POP (population) 函數是由相應的方差聚合函數派生而來的:

標准差是相應方差值的平方根。

這些標准差函數可以在引用表或視圖的 SELECT 查詢或子查詢中使用。
它們可以在 SELECT 列表或 HAVING 子句中與普通欄位值一起出現。

這些標准偏差函數不能在 WHERE 子句中使用。
它們不能在 JOIN 的 ON 子句中使用,除非 SELECT 是子查詢。

這些標准偏差函數返回數據類型 NUMERIC 的值,精度為 36 ,刻度為 17 ,除非表達式是數據類型 DOUBLE ,在這種情況下它返回數據類型 DOUBLE 。

這些函數通常應用於具有數值的欄位或表達式。
它們將非數值值(包括空字元串( " ))計算為零( 0 )。

這些標准偏差函數會忽略數據欄位中的 NULL 值。
如果查詢沒有返回行,或者返回的所有行的數據欄位值為 NULL ,則返回 NULL 。

與所有聚合函數一樣,標准差函數可以採用一個可選的 DISTINCT 子句。
STDDEV(DISTINCT col1) 返回那些不同(唯一)的 col1 欄位值的標准偏差。
STDDEV(DISTINCT BY(col2) col1) 返回記錄中 col1 欄位值的標准差,其中 col2 值是不同的(唯一的)。
但是請注意,不同的 col2 值可能包含一個單獨的 NULL 值。

與所有聚合函數一樣,標准偏差函數總是返回數據的當前狀態,包括未提交的更改,而不考慮當前事務的隔離級別。

下面的示例使用 STDDEV 返回員工年齡的標准偏差。
,以及一個或多個員工代表的不同年齡的標准差:

下面的示例使用 STDDEV_POP 返回員工年齡的總體標准差。
,以及一個或多個員工代表的不同年齡的標准差: