一、数据分组
(一)GROUP BY子句
1.按年龄进行分组统计人数:SELECT Fage,Count(*) FROM T_Employee GROUP BY Fage
2.GROUP BY 子句必须放到WHERE语句之后
3.没有出现在GROUP BY子句中的列是不能放到SELECT雨具后的列名列表中的(聚合函数中除外)
a)错误:SELECT FAge,FSalay FROM T_Employee GROUP BY FAge
b)正确:SELECT FAge,AVG(FSalay) FROM T_Employee GROUP BY FAge
(二)Having语句
SELECT Fage,Count(*) FROM T_Employee GROUP BY Fage HAVING COUNT(*)>1
HAVING不能代替WHERE。因为WHERE对原始数据过滤,HAVING对分组后的数据进行过滤。
二、限制结果集的行数
(一)查询语句
1.取工资排名前三的信息
SELECT TOP 3 * FROM T_Employee ORDER BY FSalary DESC
2.取工资排名第六到第九的信息
SELECT TOP 4 * FROM T_Employee WHERE FNumber NOT IN (SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC) ORDER BY FSalary DESC
3.Row_Number函数
SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) AS rownumber,
FNumber,FSalary,FAge, FROM T_Employee
)AS a
WHERE a.rownumber>=3 AND a.rownumber<=5
三、抑制重复数据
(一)修改表
1.给T_Employee表增加一个FSubCompany列
ALTER TABLE T_Employee ADD FSubCompany VARCHAR(20)
(二)关键词DISTINCT
DISTINCT不是针对一个列进行重复处理,而是消除完全重复的结果集
SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee
(三)联合结果集(UNION ALL)
1.要求:上下两个表的查询的列的数目相同、对应的数据类型相容,列名可以不同
SELECT FName,FAge FROM T_Employee
UNION ALL
SELECT FName,FAge FROM T_TempEmployee
2.UNION查询的结果会自动去掉重复数据,效率很低。取消重复的方法是在UNION后加关键词ALL
3.实例:
a)查询正式工和临时工的最高年龄,代码如下:
SELECT '正式工最高年龄',MAX(FAge) FROM T_Employee
UNION ALL
SELECT '临时工最高年龄',MAX(FAge) FROM T_TempEmployee
b)查询员工工资与合计
SELECT FNumber,FSalary FROM T_Employee
UNION ALL
SELECT '工资合计',SUM(FSalary) FROM T_TempEmployee
---------------------- Windows Phone 7手机开发、 .Net培训、期待与您交流! ---------------------- 详细请查看: http://net.itheima.com/
本文详细介绍了SQL中的数据分组方法,包括GROUP BY子句和HAVING语句的使用,以及如何限制结果集的行数,如取排名前几的数据。同时,还讨论了如何抑制重复数据,通过添加新列、使用DISTINCT关键字和UNION ALL操作来实现。
1797

被折叠的 条评论
为什么被折叠?



