謝麗明 朱少強
【摘 要】SQL Server中的Select語句具有強大的查詢統(tǒng)計功能,是SQL Server的最核心的語句。通過子句的添加Select語句功能不斷豐富完善,其Group by子句實現(xiàn)了分組統(tǒng)計的功能,本文通過實例探討了多加入不同的關(guān)鍵字和關(guān)鍵詞組拓展它的統(tǒng)計輸出形式。
【關(guān)鍵詞】SELECT語句;Group子句;分組統(tǒng)計
中圖分類號: TP391.1 文獻標識碼: A 文章編號: 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語言,不但遵循了標準SQL的要求,而且對其功能進行了擴展,使其功能更加完善,操作性能更加優(yōu)良。T-SQL語言的核心語句是Select語句,貌似簡單的一個Select語句能夠?qū)崿F(xiàn)數(shù)據(jù)管理中要求的查詢、統(tǒng)計等多種功能,通過Select子句的變化,Select語句在數(shù)據(jù)庫操作中展現(xiàn)多變的魅力。本文就學生成績信息管理系統(tǒng)數(shù)據(jù)庫中相關(guān)的數(shù)據(jù)統(tǒng)計匯總操作淺談Select的分組統(tǒng)計的功能實現(xiàn)。
1 學生成績信息數(shù)據(jù)庫簡介
學生成績管理系統(tǒng)涉及到學生基本信息、課程基本信息、學生所屬院系基本信息和學生選修課程情況,因此學生成績數(shù)據(jù)庫需建立四個基本表,實例用到了學生表和院系表,其物理結(jié)構(gòu)設計如表1、表2所示。
2 Select語句的分組統(tǒng)計
Select語句實現(xiàn)分組統(tǒng)計功能依賴于它的Group by子句,通過該子句的屬性列表中的屬性列為依據(jù)將相同屬性值的數(shù)據(jù)聚集成組,通過聚合函數(shù)進行統(tǒng)計。實現(xiàn)該功能是應注意,在Select的選擇列表中的列必須包含在聚合函數(shù)或 GROUP BY 子句中。
2.1 單屬性的分組統(tǒng)計
分組基于一個屬性的分組統(tǒng)計是最簡單的分組統(tǒng)計情況,只需根據(jù)Group by之后的屬性進行分組,同時相應的聚合函數(shù)給出統(tǒng)計結(jié)果。
例1.SELECT 院系名,COUNT(*) AS '人數(shù)'
FROM 學生,院系
WHERE 學生.院系號=院系.院系號
GROUP BY 院系名
查詢結(jié)果如圖1所示。
示例中根據(jù)院系名進行分組,統(tǒng)計出每個院系的學生數(shù)。
2.2 多屬性的分組統(tǒng)計
Group by后的屬性超過一個,分組統(tǒng)計根據(jù)Group by屬性列表按照自右向左順序?qū)嵤┓纸M,即首先按照最右屬性分組,在同一分組內(nèi)再按次右屬性分組,以此類推。這種分組順序和Order by排序順序相反。
例2.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學生,院系
WHERE 學生.院系號=院系.院系號
GROUP BY 院系名,性別
查詢結(jié)果如圖2所示。
例3.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學生,院系
WHERE 學生.院系號=院系.院系號
GROUP BY 性別,院系名
查詢結(jié)果如圖3所示。
例2和例3的差異就在Group by子句中院系名和性別的順序。例2中性別居右,首先按男、女分組,分別在“男”和“女”中再區(qū)分院系;而例3中相反的結(jié)果,先按院系分組,在同一院系中再區(qū)分“男”和“女”。
2.3 分組結(jié)果再統(tǒng)計
Group by子句中帶有With Cube或With Rollup可以對分組結(jié)果再統(tǒng)計,實現(xiàn)分組結(jié)果分層統(tǒng)計的效果。
例4.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學生,院系
WHERE 學生.院系號=院系.院系號
GROUP BY 性別,院系名
WITH CUBE
查詢結(jié)果如圖4所示。
例5.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學生,院系
WHERE 學生.院系號=院系.院系號
GROUP BY 院系名,性別
WITH CUBE
查詢結(jié)果如圖5所示。
從例4、例5可以看到,with cube給出了按每個分組屬性的層次小計和整體的總計結(jié)果,分組依然按照自右向左的原則。
例6.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學生,院系
WHERE 學生.院系號=院系.院系號
GROUP BY 性別,院系名
WITH ROLLUP
查詢結(jié)果如圖6所示。
例7.SELECT 院系名,性別,COUNT(*) AS '人數(shù)'
FROM 學生,院系
WHERE 學生.院系號=院系.院系號
GROUP BY 院系名,性別
WITH ROLLUP
查詢結(jié)果如圖7所示。
由例6、例7可以看到,雖然使用with rollup也進行了分層統(tǒng)計,但分層統(tǒng)計結(jié)果只給出一個屬性分組情況。值得注意的時,此時,分組不再是按照Group by子句中屬性自右向左的方向分組,而是以相反的順序進行分組。
3 總結(jié)
通過實例的實驗分析,顯示出SQL Server中Select語句功能的豐富性,僅分組統(tǒng)計就可以變換出多種輸出形式;同時,也顯示出不同實現(xiàn)方式的差異,提醒使用者在掌握基本原理的基礎上多通過實際操作發(fā)現(xiàn)T-SQL語句在具體數(shù)據(jù)庫管理系統(tǒng)中的細小差異。
【參考文獻】
[1]程志云,張勇,趙艷忠等.數(shù)據(jù)庫原理與SQL Server 2012應用教程[M].機械工業(yè)出版社,2018.
[2]郭翠.論SQL Server數(shù)據(jù)庫中Case函數(shù)的作用[J].信息與電腦,2018.5.