我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。 self-transcendence
第7章 表中数据的排序与分组
7.1 使用order by 子句对数据记录进行排序
Order by 列名,列名2 asc|desc
Asc升序,desc降序,默认为asc。
空值的行,asc时会排在最先,desc时会排在最后。
列名可以用列的序号代替,该列如果是第五列,列名就可以用5代替。
用来排序的这个列名,可以不用出现在select后面。
7.2 常用的聚合函数
常用的聚合函数有count、max、min、sum、avg
Count、sum、avg中可以使用distinct关键字去除指定列中的重复项然后函数不计算重复值。
Max、min中的列是字符型,则按照首字母a-z的顺序排序,首字母相同就比较第二个字母,如果是汉字就按照汉语拼音的全拼来排序。
Sum和avg函数中表达式只能是数字类型的值。
除了count(*)外,其他的函数计算时都忽略null行
Count函数计算表中的总行数。
使用聚合函数的时候,必须要使用group by。
7.3 使用group by对表中的数据进行分组
单列多列都可以分组。在group by之后还可以使用having对结果进行进一步筛选。
例:group by 列名1,列名2 having money > 2000
Where是针对分组之前数据的条件,having是针对分组之后的数据的条件。
Having筛选的列,可以不用出现在select后面。
Group by分组的列,如果有null值,null就会成为分组中的一组。
7.4 使用rollup关键字统计数据
Rollup相当于总计操作,在所有数据最后生成一列总数,计算数值列。
在mysql和sqlserver中使用with rollup:
例:group by dept,pro with rollup
oracle使用rollup:
例:group by rollup(dept,pro )
结果都是一样的:
Dept |
Pro |
Max(salary) |
计算机系 |
教授 |
3000 |
计算机系 |
老师 |
2000 |
Null |
null |
5000 |
7.5 限制结果集行数
Mysql在查询语句最后:
limit n,n等于几,显示几条;
limit offset,n offset=0,就从第1条开始查n条;
Oracle在where条件之后:
Rownum <n
Rownum <=n
从1开始,查n条
Sql server再select之后:
Select top n [precent] 列名1,列名2
Top是关键字,n显示行数,precent返回前n%的行数,是可选的。
如果n=10,没有precent就是返回结果的前10行,有precent是返回结果的前10%行。
Top语句还可以用于insert,update,delete语句中。