(十二)分组查询

将数据表中的数据按某种条件分成组,按组显示统计信息

查询各班学生的最大年龄、最小年龄、平均年龄和人数

分组

SELECT <字段名表1> FROM <表名> — 这里字段名表1 应该 是 按照字段名表2 分组以后 能够产生唯一值的 字段(如:班级)

[WHERE <条件> ]

GROUP BY <字段名表2>

[HAVING <条件> ]

[ORDER BY <字段名列表3> ]

--例1 查询各班学生的最大年龄、最小年龄、平均年龄和人数
-- 将多余空格删去
UPDATE Student
SET Sdept = ltrim(sdept)

Select ltrim(Sdept) AS 系别, MAX(Sage) AS 最大, MIN(Sage) AS 最小,
AVG(Sage) AS 平均, COUNT(*) AS 人数
FROM Student
GROUP BY ltrim(Sdept)
ORDER BY 平均 DESC

--例2 查询各班学生的最大年龄、最小年龄、平均年龄和人数
--并且按平均年龄降序排列
--见上

--例3 查询各系别男生和女生人数
SELECT Sdept, Ssex, COUNT(*) AS 人数
FROM Student
GROUP BY Sdept, Ssex  --通过系别,男女分组
ORDER BY Sdept

--例4 查询各系别姓张的学生的人数
SELECT Sdept, Count(*) AS 张姓人数 
FROM Student
WHERE Sname LIKE '张%'
GROUP BY Sdept

--例5 查询姓"张"的学生人数等于1的班级 及 姓张的人数
SELECT Sdept, Count(*) AS Douzi  
FROM Student
WHERE Sname LIKE '张%'
GROUP BY Sdept
Having COUNT(*) = 1

--例6 查询各系别同学来自不同的省份人数,按班级排序
Select Sdept, Province, Count(*)
from Student
GROUP BY Sdept, Province
ORDER BY Sdept
--(5)创建每个学生所选课程的学号和平均分,并按平均分排序的视图ST1。
GO
create View ST1(Sno, AVGE)
AS
Select Top 100 percent Sno, AVG(Grade) AS AVGE
From SC
Group by Sno
Order by AVG(Grade) asc