黑马程序员—学习笔记之SQL数据分组、限制结果集行数

本文详细介绍了SQL中的数据分组方法,包括GROUP BY子句和HAVING语句的使用,以及如何限制结果集的行数,如取排名前几的数据。同时,还讨论了如何抑制重复数据,通过添加新列、使用DISTINCT关键字和UNION ALL操作来实现。
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

一、数据分组

(一)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/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值