【SQL.基礎(chǔ)構(gòu)建-第三節(jié)(3/4)】

--?? ?? Tips:聚合和排序

--?? ?一、對(duì)表進(jìn)行聚合查詢

--  1.聚合函數(shù)

--    (1)5 個(gè)常用函數(shù):

--      ①COUNT:計(jì)算表中的記錄(行)數(shù)婶博。

--      ②SUM:計(jì)算表中數(shù)值列的數(shù)據(jù)合計(jì)值。

--     ∑钢场③AVG:計(jì)算表中數(shù)值列的數(shù)據(jù)平均值。

--     ⌒腥稹④MAX:求出表中任意列中數(shù)據(jù)的最大值奸腺。

--      ⑤MIN:求出表中任意列中數(shù)據(jù)的最小值血久。

--   ⊥徽铡(2)聚合:將多行匯總成一行。

--2.計(jì)算表中數(shù)據(jù)的行數(shù)

--示例

SELECT COUNT(*)?? ??? ?-- *:參數(shù)氧吐,這里代表全部列

FROM dbo.Conbio;

--------------------------------------

--3.計(jì)算 NULL 以外數(shù)據(jù)的行數(shù)

--  將 COUNT(*) 的參數(shù)改成指定對(duì)象的列讹蘑,就可以得到該列的非 NULL 行數(shù)末盔。

SELECT COUNT(Conbio_price2)

FROM dbo.Conbio;

--【備注】除了 COUNT 函數(shù),其它函數(shù)不能將星號(hào)作為參數(shù)衔肢。

-- 【備注】COUNT 函數(shù)的結(jié)果根據(jù)參數(shù)的不同而不同庄岖。COUNT(*) 會(huì)得到包含 NULL 的數(shù)據(jù)行數(shù),而 COUNT(<列名>) 會(huì)得到 NULL 之外的數(shù)據(jù)行數(shù)角骤。

--------------------------------------

--4.計(jì)算合計(jì)值

select

SUM(Conbio_price1) as sum_Conbio_price1,?? ??? ?--總和

AVG(Conbio_price1) as avg_Conbio_price1,?? ??? ?--平均

MAX(Conbio_price1) as max_Conbio_price1,?? ??? ?--最大值

MIN(Conbio_price1) as min_Conbio_price1 ?? ??? ?--最小值

from dbo.Conbio;

--【備注】所有的聚合函數(shù)隅忿,如果以列名為參數(shù),會(huì)無(wú)視 NULL 值所在的行邦尊。

------------------

SELECT MAX(Conbio_DATE),?? ??? ?--Conbio_DATE 為日期

MIN(Conbio_date)

FROM dbo.Conbio

--【備注】MAX/MIN 函數(shù)幾乎適用于所有數(shù)據(jù)類型的列背桐。SUM/AVG 函數(shù)只適用于數(shù)值類型的列。

--------------------------------------

-- 5.使用聚合函數(shù)刪除重復(fù)值(關(guān)鍵字 distinct)

--示例1:計(jì)算去除重復(fù)數(shù)據(jù)后的數(shù)據(jù)行數(shù)

SELECT COUNT(DISTINCT Conbio_varieties)

FROM dbo.conbio;

------------------

--示例2:先計(jì)算數(shù)據(jù)行數(shù)再刪除重復(fù)數(shù)據(jù)的結(jié)果

SELECT DISTINCT COUNT(Conbio_Varieties)

FROM dbo.Conbio;

--【備注】在聚合函數(shù)的參數(shù)中使用 DISTINCT(示例1)蝉揍,可以刪除重復(fù)數(shù)據(jù)链峭。DISTINCT 不僅限于 COUNT 函數(shù),所有的聚合函數(shù)都可以使用又沾。

--------------------------------------

--?? ?二弊仪、對(duì)表進(jìn)行分組

--  1.GROUP BY 子句

--語(yǔ)法:

--SELECT <列名1>, <列名2>, ...

--FROM <表名>

--GROUP BY <列名1>, <列名2>, ...;

--示例

SELECT conbio_varieties AS '商品種類',

COUNT(*) AS '數(shù)量'

FROM dbo.conbio

GROUP BY conbio_varieties;

--【備注】GROUP BY 子句中指定的列稱為“聚合鍵”或“分組列”。

--  【子句的書寫順序(暫定)】SELECT --> FROM --> WHERE --> GROUP BY

------------------

--2.聚合鍵中包含 NULL 的情況

SELECT conbio_price2, COUNT(*)

FROM dbo.conbio

GROUP BY conbio_price2;

--【備注】聚合鍵中包含 NULL 時(shí)杖刷,在結(jié)果中也會(huì)以 NULL 行的形式表現(xiàn)出來(lái)励饵。

--------------------------------------

--3.WHERE 對(duì) GROUP BY 執(zhí)行結(jié)果的影響

--語(yǔ)法

--SELECT <列名1>, <列名2>, ...

--FROM <表名>

--WHERE <表達(dá)式>

--GROUP BY <列名1>, <列名2>, ...

SELECT conbio_price2, COUNT(*)

FROM dbo.conbio

WHERE conbio_varieties = '衣服'

GROUP BY conbio_price2

--這里是先根據(jù) WHERE 子句指定的條件進(jìn)行過(guò)濾,然后再進(jìn)行聚合處理滑燃。

--  【執(zhí)行順序】FROM --> WHERE --> GROUP BY --> SELECT役听。這里是執(zhí)行順序,跟之前的書寫順序是不一樣的表窘。

--------------------------------------

--4.與聚合函數(shù)和 GROUP BY 子句有關(guān)的常見錯(cuò)誤

--〉溆琛(1)易錯(cuò):在 SELECT 子句中書寫了多余的列

--   SELECT 子句只能存在以下三種元素:

--     ①常數(shù)

--    ±盅稀②聚合函數(shù)

--    ×鲂洹③GROUP BY 子句中指定的列名(即聚合鍵)

--易錯(cuò)點(diǎn)1

--  【總結(jié)】使用 GROUP BY 子句時(shí),SELECT 子句不能出現(xiàn)聚合鍵之外的列名昂验。

-- ∧跻(2)易錯(cuò):在 GROUP BY 子句中寫了列的別名

--回顧之前說(shuō)的執(zhí)行順序,SELECT 子句是在 GROUP BY 子句之后執(zhí)行凛篙。所以執(zhí)行到 GROUP BY 子句時(shí)無(wú)法識(shí)別別名。

-- 【總結(jié)】GROUP BY 子句不能使用 SELECT 子句中定義的別名栏渺。

--∏喊稹(3)易錯(cuò):GROUP BY 子句的結(jié)果能排序嗎?

-- 【解答】它是隨機(jī)的磕诊。如果想排序填物,請(qǐng)使用 ORDER BY 子句纹腌。

-- 【總結(jié)】GROUP BY 子句結(jié)果的顯示是無(wú)序的。

--(4)易錯(cuò):在 WHERE 子句中使用聚合函數(shù)

--  【總結(jié)】只有 SELECT 子句和 HAVING 子句(以及 ORDER BY 子句)中能夠使用聚合函數(shù)滞磺。

--------------------------------------

--三升薯、為聚合結(jié)果指定條件

--  1.HAVING 子句

--  WHERE 子句智能指定記錄(行)的條件,而不能用來(lái)指定組的條件击困。

--  【備注】HAVING 是 HAVE(擁有)的現(xiàn)在分詞涎劈。

--語(yǔ)法:

--SELECT <列名1>, <列名2>, ...

--FROM <表名>

--GROUP BY <列名1>, <列名2>, ...

--HAVING <分組結(jié)果對(duì)應(yīng)的條件>

--【書寫順序】SELECT --> FROM --> WHERE --> GROUP BY --> HAVING

SELECT conbio_varieties, COUNT(*)

FROM dbo.conbio

GROUP BY conbio_varieties

HAVING COUNT(*) = 2

------------------

--2.HAVING 子句的構(gòu)成要素

--  (1)3 要素:

--   ≡牟琛①常數(shù)

--   ≈朊丁②聚合函數(shù)

--    ③GROUP BY 子句中指定的列名(即聚合鍵)

------------------

--3.HAVING 與 WHERE

-- 有些條件可以寫在 HAVING 子句中脸哀,又可以寫在 WHERE 子句中蹦浦。這些條件就是聚合鍵所對(duì)應(yīng)的條件。

--【建議】雖然結(jié)果一樣撞蜂,聚合鍵對(duì)應(yīng)的條件應(yīng)該寫在 WHERE 子句中盲镶,不是 HAVING 子句中。

--  【理由】①WHERE 子句的執(zhí)行速度比 HAVING 快蝌诡。

--     「然摺②意義:WHERE 子句 = 指定行所對(duì)應(yīng)的條件,HAVING 子句 = 指定組所對(duì)應(yīng)的條件送漠。

--------------------------------------

--四顽照、對(duì)查詢結(jié)果進(jìn)行排序

--1.ORDER BY 子句

--語(yǔ)法:

--SELECT <列名1>, <列名2>, ...

--FROM <表名>

--ORDER BY <排序基準(zhǔn)列1>, <排序基準(zhǔn)列2>, ...

SELECT conbio_id, conbio_price1

FROM dbo.conbio

ORDER BY conbio_price1;??? --升序排列

--排序鍵:ORDER BY 子句中書寫的列名。

--【書寫順序】SELECT --> FROM --> WHERE --> GROUP BY --> HAVING --> ORDER BY

------------------

--2.升序(ASC)和降序(DESC):

SELECT conbio_id, conbio_price1

FROM dbo.conbio

ORDER BY conbio_price1 DESC;??? --降序排列

--ORDER BY conbio_id asc;??? --降序排列

--【備注】ORDER BY 子句中排列順序時(shí)會(huì)默認(rèn)使用升序(ASC)進(jìn)行排列闽寡。

------------------

--3.指定多個(gè)排序鍵

SELECT conbio_id, conbio_name, conbio_price1, conbio_price2

FROM dbo.conbio

ORDER BY conbio_price1, conbio_price2;

------------------

--4.NULL 值的順序:排序鍵中包含 NULL 時(shí)代兵,會(huì)在開頭或末尾進(jìn)行匯總。

------------------

--5.在排序鍵中使用 SELECT 子句中的別名

SELECT conbio_id AS id, conbio_name, conbio_price1 AS ht

FROM dbo.conbio

ORDER BY ht, id;

--【執(zhí)行順序】FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY

--【備注】ORDER BY 子句可以使用 SELECT 子句中定義的別名爷狈,GROUP BY 子句不能使用別名植影。

------------------

--6.ORDER BY 子句中使用聚合函數(shù)

SELECT conbio_varieties, COUNT(*)

FROM dbo.conbio

GROUP BY conbio_varieties

ORDER BY COUNT(*);

------------------

--7.不建議使用列的編號(hào)進(jìn)行排序,雖然可以

SELECT conbio_id ,

conbio_name ,

conbio_varieties ,

conbio_price1 ,

conbio_price2 ,

conbio_date

FROM dbo.conbio

ORDER BY conbio_price1 DESC, conbio_id;

------------------

SELECT conbio_id ,

conbio_name ,

conbio_varieties ,

conbio_price1 ,

conbio_price2 ,

conbio_date

FROM dbo.conbio

ORDER BY 4 DESC, 1;?? ??? ??? ??? ?--這里使用列的編號(hào)涎永,由于閱讀不便思币,不推薦使用

--【備注】在 ORDER BY 子句中不要使用列的編號(hào)。

--------------------------------------

--歡迎關(guān)注個(gè)人公眾號(hào):Zkcops

由:zkcops 撰寫(希望能對(duì)你有所幫助羡微,轉(zhuǎn)載注明出處9榷觥)

--------------------------------------

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妈倔,隨后出現(xiàn)的幾起案子博投,更是在濱河造成了極大的恐慌,老刑警劉巖盯蝴,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅哗,死亡現(xiàn)場(chǎng)離奇詭異听怕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)虑绵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門尿瞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翅睛,你說(shuō)我怎么就攤上這事声搁。” “怎么了宏所?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵酥艳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我爬骤,道長(zhǎng)充石,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任霞玄,我火速辦了婚禮骤铃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坷剧。我一直安慰自己惰爬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布惫企。 她就那樣靜靜地躺著撕瞧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狞尔。 梳的紋絲不亂的頭發(fā)上丛版,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音偏序,去河邊找鬼页畦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛研儒,可吹牛的內(nèi)容都是我干的豫缨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼端朵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼好芭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起冲呢,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栓撞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓤湘,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年恩尾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弛说。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翰意,死狀恐怖木人,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冀偶,我是刑警寧澤醒第,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站进鸠,受9級(jí)特大地震影響稠曼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜客年,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一霞幅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧量瓜,春花似錦司恳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烫饼,卻和暖如春猎塞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枫弟。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工邢享, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淡诗。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓骇塘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親韩容。 傳聞我的和親對(duì)象是個(gè)殘疾皇子款违,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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