謝麗明 朱少?gòu)?qiáng)
【摘 要】SQL Server中的Select語(yǔ)句具有強(qiáng)大的查詢統(tǒng)計(jì)功能,是SQL Server的最核心的語(yǔ)句。通過子句的添加Select語(yǔ)句功能不斷豐富完善,其Group by子句實(shí)現(xiàn)了分組統(tǒng)計(jì)的功能,本文通過實(shí)例探討了多加入不同的關(guān)鍵字和關(guān)鍵詞組拓展它的統(tǒng)計(jì)輸出形式。
【關(guān)鍵詞】SELECT語(yǔ)句;Group子句;分組統(tǒng)計(jì)
中圖分類號(hào): TP391.1 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2018)34-0099-003
DOI:10.19694/j.cnki.issn2095-2457.2018.34.040
Analysis of Group Statistics Function of Select Statement in SQL Server
XIE Li-ming ZHU Shao-qiang
(School of Information Engineering,Pingdingshan University,Pingdingshan Henan 467000,China)
【Abstract】Select statement in SQL Server has powerful query statistics function,it is the core statement of SQL Server.Continuously enrich and improve the function of Select sentence by adding clauses,Group by clause realizes the function of grouping statistics.This paper discusses how to expand its statistical output form by adding different keywords and key phrases through examples.
【Key words】SELECT Statement;Group Clause;Grouping Statistics-SQL語(yǔ)言,不但遵循了標(biāo)準(zhǔn)SQL的要求,而且對(duì)其功能進(jìn)行了擴(kuò)展,使其功能更加完善,操作性能更加優(yōu)良。T-SQL語(yǔ)言的核心語(yǔ)句是Select語(yǔ)句,貌似簡(jiǎn)單的一個(gè)Select語(yǔ)句能夠?qū)崿F(xiàn)數(shù)據(jù)管理中要求的查詢、統(tǒng)計(jì)等多種功能,通過Select子句的變化,Select語(yǔ)句在數(shù)據(jù)庫(kù)操作中展現(xiàn)多變的魅力。本文就學(xué)生成績(jī)信息管理系統(tǒng)數(shù)據(jù)庫(kù)中相關(guān)的數(shù)據(jù)統(tǒng)計(jì)匯總操作淺談Select的分組統(tǒng)計(jì)的功能實(shí)現(xiàn)。
1 學(xué)生成績(jī)信息數(shù)據(jù)庫(kù)簡(jiǎn)介
學(xué)生成績(jī)管理系統(tǒng)涉及到學(xué)生基本信息、課程基本信息、學(xué)生所屬院系基本信息和學(xué)生選修課程情況,因此學(xué)生成績(jī)數(shù)據(jù)庫(kù)需建立四個(gè)基本表,實(shí)例用到了學(xué)生表和院系表,其物理結(jié)構(gòu)設(shè)計(jì)如表1、表2所示。
2 Select語(yǔ)句的分組統(tǒng)計(jì)
Select語(yǔ)句實(shí)現(xiàn)分組統(tǒng)計(jì)功能依賴于它的Group by子句,通過該子句的屬性列表中的屬性列為依據(jù)將相同屬性值的數(shù)據(jù)聚集成組,通過聚合函數(shù)進(jìn)行統(tǒng)計(jì)。實(shí)現(xiàn)該功能是應(yīng)注意,在Select的選擇列表中的列必須包含在聚合函數(shù)或 GROUP BY 子句中。
2.1 單屬性的分組統(tǒng)計(jì)
分組基于一個(gè)屬性的分組統(tǒng)計(jì)是最簡(jiǎn)單的分組統(tǒng)計(jì)情況,只需根據(jù)Group by之后的屬性進(jìn)行分組,同時(shí)相應(yīng)的聚合函數(shù)給出統(tǒng)計(jì)結(jié)果。
例1.SELECT 院系名,COUNT(*) AS '人數(shù)'
FROM 學(xué)生,院系
WHERE 學(xué)生.院系號(hào)=院系.院系號(hào)
GROUP BY 院系名
查詢結(jié)果如圖1所示。
示例中根據(jù)院系名進(jìn)行分組,統(tǒng)計(jì)出每個(gè)院系的學(xué)生數(shù)。
2.2 多屬性的分組統(tǒng)計(jì)
Group by后的屬性超過一個(gè),分組統(tǒng)計(jì)根據(jù)Group by屬性列表按照自右向左順序?qū)嵤┓纸M,即首先按照最右屬性分組,在同一分組內(nèi)再按次右屬性分組,以此類推。這種分組順序和Order by排序順序相反。
例2.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學(xué)生,院系
WHERE 學(xué)生.院系號(hào)=院系.院系號(hào)
GROUP BY 院系名,性別
查詢結(jié)果如圖2所示。
例3.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學(xué)生,院系
WHERE 學(xué)生.院系號(hào)=院系.院系號(hào)
GROUP BY 性別,院系名
查詢結(jié)果如圖3所示。
例2和例3的差異就在Group by子句中院系名和性別的順序。例2中性別居右,首先按男、女分組,分別在“男”和“女”中再區(qū)分院系;而例3中相反的結(jié)果,先按院系分組,在同一院系中再區(qū)分“男”和“女”。
2.3 分組結(jié)果再統(tǒng)計(jì)
Group by子句中帶有With Cube或With Rollup可以對(duì)分組結(jié)果再統(tǒng)計(jì),實(shí)現(xiàn)分組結(jié)果分層統(tǒng)計(jì)的效果。
例4.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學(xué)生,院系
WHERE 學(xué)生.院系號(hào)=院系.院系號(hào)
GROUP BY 性別,院系名
WITH CUBE
查詢結(jié)果如圖4所示。
例5.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學(xué)生,院系
WHERE 學(xué)生.院系號(hào)=院系.院系號(hào)
GROUP BY 院系名,性別
WITH CUBE
查詢結(jié)果如圖5所示。
從例4、例5可以看到,with cube給出了按每個(gè)分組屬性的層次小計(jì)和整體的總計(jì)結(jié)果,分組依然按照自右向左的原則。
例6.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學(xué)生,院系
WHERE 學(xué)生.院系號(hào)=院系.院系號(hào)
GROUP BY 性別,院系名
WITH ROLLUP
查詢結(jié)果如圖6所示。
例7.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學(xué)生,院系
WHERE 學(xué)生.院系號(hào)=院系.院系號(hào)
GROUP BY 院系名,性別
WITH ROLLUP
查詢結(jié)果如圖7所示。
由例6、例7可以看到,雖然使用with rollup也進(jìn)行了分層統(tǒng)計(jì),但分層統(tǒng)計(jì)結(jié)果只給出一個(gè)屬性分組情況。值得注意的時(shí),此時(shí),分組不再是按照Group by子句中屬性自右向左的方向分組,而是以相反的順序進(jìn)行分組。
3 總結(jié)
通過實(shí)例的實(shí)驗(yàn)分析,顯示出SQL Server中Select語(yǔ)句功能的豐富性,僅分組統(tǒng)計(jì)就可以變換出多種輸出形式;同時(shí),也顯示出不同實(shí)現(xiàn)方式的差異,提醒使用者在掌握基本原理的基礎(chǔ)上多通過實(shí)際操作發(fā)現(xiàn)T-SQL語(yǔ)句在具體數(shù)據(jù)庫(kù)管理系統(tǒng)中的細(xì)小差異。
【參考文獻(xiàn)】
[1]程志云,張勇,趙艷忠等.數(shù)據(jù)庫(kù)原理與SQL Server 2012應(yīng)用教程[M].機(jī)械工業(yè)出版社,2018.
[2]郭翠.論SQL Server數(shù)據(jù)庫(kù)中Case函數(shù)的作用[J].信息與電腦,2018.5.