第十一章 SQL聚合函數(shù) SUM

第十一章 SQL聚合函數(shù) SUM

返回指定列值之和的聚合函數(shù)婉商。

大綱

SUM([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

參數(shù)

  • ALL - 可選-指定SUM返回表達(dá)式中所有值的和。
    如果沒(méi)有指定關(guān)鍵字柳譬,這是默認(rèn)值透葛。
  • DISTINCT - 可選-一個(gè)DISTINCT子句,指定SUM返回表達(dá)式中不同(唯一)值的和搭儒。
    DISTINCT可以指定BY(colo -list)子句穷当,其中colo -list可以是單個(gè)字段,也可以是用逗號(hào)分隔的字段列表淹禾。
  • expression - 任何有效的表達(dá)式馁菜。
    通常是包含要求和的數(shù)據(jù)值的列的名稱(chēng)。
  • %FOREACH(col-list) - 可選-列名或以逗號(hào)分隔的列名列表铃岔。
  • %AFTERHAVING - 可選-應(yīng)用在HAVING子句中的條件汪疮。

SUM返回與expression相同的數(shù)據(jù)類(lèi)型,但有如下異常:TINYINT毁习、SMALLINTINTEGER返回的數(shù)據(jù)類(lèi)型都是INTEGER智嚷。

注意:SUM可以指定為聚合函數(shù),也可以指定為窗口函數(shù)纺且。
本參考頁(yè)面描述了SUM作為聚合函數(shù)的使用盏道。
SUM作為一個(gè)窗口函數(shù)在窗口函數(shù)概述中描述。

描述

SUM聚合函數(shù)返回表達(dá)式值的和载碌。
通常猜嘱,表達(dá)式是查詢(xún)返回的多行中字段的名稱(chēng)(或包含一個(gè)或多個(gè)字段名稱(chēng)的表達(dá)式)衅枫。

SUM可以在引用表或視圖的SELECT查詢(xún)或子查詢(xún)中使用。
SUM可以在SELECT列表或HAVING子句中與普通字段值一起出現(xiàn)朗伶。

SUM不能在WHERE子句中使用弦撩。
SUM不能在JOINON子句中使用,除非SELECT是子查詢(xún)论皆。

和所有聚合函數(shù)一樣益楼,SUM可以接受一個(gè)可選的DISTINCT子句。
SUM(DISTINCT col1)只匯總那些不同(唯一)的col1字段值点晴。
SUM(DISTINCT BY(col2) col1)只匯總col2值不同(唯一)的記錄中的col1字段值感凤。
但是請(qǐng)注意,不同的col2值可能包含一個(gè)單獨(dú)的NULL值觉鼻。

數(shù)據(jù)值

對(duì)于數(shù)據(jù)類(lèi)型為INT俊扭、SMALLINTTINYINT的表達(dá)式,SUM返回的數(shù)據(jù)類(lèi)型為INTEGER坠陈。
對(duì)于數(shù)據(jù)類(lèi)型為BIGINT的表達(dá)式,SUM返回?cái)?shù)據(jù)類(lèi)型BIGINT捐康。
對(duì)于數(shù)據(jù)類(lèi)型為DOUBLE的表達(dá)式仇矾,SUM返回?cái)?shù)據(jù)類(lèi)型為DOUBLE的表達(dá)式。
對(duì)于所有其他數(shù)字?jǐn)?shù)據(jù)類(lèi)型解总,SUM返回?cái)?shù)據(jù)類(lèi)型numeric贮匕。

SUM返回精度為18的值。
返回值的尺度與表達(dá)式的尺度相同花枫,但有以下例外刻盐。
如果expression是一個(gè)數(shù)據(jù)類(lèi)型為VARCHARVARBINARY的數(shù)值,則返回值的尺度為8劳翰。

默認(rèn)情況下敦锌,聚合函數(shù)使用邏輯(內(nèi)部)數(shù)據(jù)值,而不是顯示值佳簸。

SUM通常應(yīng)用于具有數(shù)值的字段或表達(dá)式乙墙。
因?yàn)橹粓?zhí)行最小的類(lèi)型檢查,所以有可能(盡管很少有意義)對(duì)非數(shù)字字段調(diào)用它生均。
SUM計(jì)算包括空字符串(")在內(nèi)的非數(shù)值值為0(0)听想。如果expression是數(shù)據(jù)類(lèi)型VARCHAR,則返回到ODBC或JDBC的值是數(shù)據(jù)類(lèi)型DOUBLE马胧。

在派生SUM聚合函數(shù)值時(shí)汉买,數(shù)據(jù)字段中的NULL值將被忽略。
如果查詢(xún)沒(méi)有返回任何行佩脊,或者返回的所有行的數(shù)據(jù)字段值為NULL, SUM返回NULL蛙粘。

優(yōu)化

SUM計(jì)算的SQL優(yōu)化可以使用一個(gè)位片索引垫卤,如果這個(gè)索引是為字段定義的。

當(dāng)前事務(wù)期間所做的更改

與所有聚合函數(shù)一樣组题,SUM總是返回?cái)?shù)據(jù)的當(dāng)前狀態(tài)葫男,包括未提交的更改,而不考慮當(dāng)前事務(wù)的隔離級(jí)別崔列。

示例

在下面的例子中梢褐,美元符號(hào)($)連接到薪金數(shù)額。

下面的查詢(xún)返回示例中所有員工的工資之和赵讯。
雇員數(shù)據(jù)庫(kù):

SELECT '$' || SUM(Salary) AS Total_Payroll
     FROM Sample.Employee

下面的查詢(xún)使用 %AFTERHAVING必須返回所有工資的總和和每個(gè)州超過(guò)$80,000的工資的總和盈咳,其中至少有一個(gè)人的工資為> $80,000:

SELECT Home_State,
       '$' || SUM(Salary) AS Total_Payroll,
       '$' || SUM(Salary %AFTERHAVING) AS Exec_Payroll
     FROM Sample.Employee
     GROUP BY Home_State
     HAVING Salary > 80000
     ORDER BY Home_State
image.png

下面的查詢(xún)返回示例中每個(gè)職位工資的總和和平均值。
雇員數(shù)據(jù)庫(kù):

SELECT Title,
       '$' || SUM(Salary) AS Total,
       '$' || AVG(Salary) AS Average
     FROM Sample.Employee
     GROUP BY Title
     ORDER BY Average
image.png

下面的查詢(xún)顯示了與算術(shù)表達(dá)式一起使用的SUM边翼。
對(duì)于示例中的每個(gè)職位名稱(chēng)鱼响。
員工數(shù)據(jù)庫(kù),返回當(dāng)前工資和工資增加10%的工資之和:

SELECT Title,
       '$' || SUM(Salary) AS BeforeRaises,
       '$' || SUM(Salary * 1.1) AS AfterRaises
     FROM Sample.Employee
     GROUP BY Title
     ORDER BY Title
image.png

下面的查詢(xún)顯示了使用CASE語(yǔ)句與邏輯表達(dá)式一起使用的SUM组底。
它計(jì)算所有受薪員工丈积,并使用SUM計(jì)算所有年薪為9萬(wàn)美元或以上的受薪員工。

SELECT COUNT(Salary) As AllPaid, 
       SUM(CASE WHEN (Salary >= 90000)
           THEN 1 ELSE 0 END) As TopPaid
       FROM Sample.Employee
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末债鸡,一起剝皮案震驚了整個(gè)濱河市江滨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厌均,老刑警劉巖唬滑,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異棺弊,居然都是意外死亡晶密,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)模她,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稻艰,“玉大人,你說(shuō)我怎么就攤上這事缝驳×猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵用狱,是天一觀(guān)的道長(zhǎng)运怖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)夏伊,這世上最難降的妖魔是什么摇展? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮溺忧,結(jié)果婚禮上咏连,老公的妹妹穿的比我還像新娘盯孙。我一直安慰自己,他們只是感情好祟滴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布振惰。 她就那樣靜靜地躺著,像睡著了一般垄懂。 火紅的嫁衣襯著肌膚如雪骑晶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天草慧,我揣著相機(jī)與錄音桶蛔,去河邊找鬼。 笑死漫谷,一個(gè)胖子當(dāng)著我的面吹牛仔雷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舔示,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碟婆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了惕稻?” 一聲冷哼從身側(cè)響起脑融,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缩宜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體甥温,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锻煌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姻蚓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宋梧。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狰挡,靈堂內(nèi)的尸體忽然破棺而出捂龄,到底是詐尸還是另有隱情,我是刑警寧澤加叁,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布倦沧,位于F島的核電站,受9級(jí)特大地震影響它匕,放射性物質(zhì)發(fā)生泄漏展融。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一豫柬、第九天 我趴在偏房一處隱蔽的房頂上張望告希。 院中可真熱鬧扑浸,春花似錦、人聲如沸燕偶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)指么。三九已至酝惧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涧尿,已是汗流浹背系奉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姑廉,地道東北人缺亮。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桥言,于是被迫代替她去往敵國(guó)和親萌踱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容