7.表中数据的排序与分组

我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。                   self-transcendence

第7章 表中数据的排序与分组

7.1 使用order by 子句对数据记录进行排序

Order by 列名,列名2  asc|desc

Asc升序,desc降序,默认为asc

空值的行,asc时会排在最先,desc时会排在最后。

列名可以用列的序号代替,该列如果是第五列,列名就可以用5代替。

用来排序的这个列名,可以不用出现在select后面。

7.2 常用的聚合函数

常用的聚合函数有countmaxminsumavg

Countsumavg中可以使用distinct关键字去除指定列中的重复项然后函数不计算重复值。

Maxmin中的列是字符型,则按照首字母a-z的顺序排序,首字母相同就比较第二个字母,如果是汉字就按照汉语拼音的全拼来排序。

Sumavg函数中表达式只能是数字类型的值。

除了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相当于总计操作,在所有数据最后生成一列总数,计算数值列。

mysqlsqlserver中使用with rollup

例:group by dept,pro with rollup

oracle使用rollup

例:group by rollup(dept,pro )

结果都是一样的:

Dept

Pro

Maxsalary

计算机系

教授

3000

计算机系

老师

2000

Null

null

5000

7.5 限制结果集行数

Mysql在查询语句最后:

limit nn等于几,显示几条;

limit offsetn   offset=0,就从第1条开始查n条;

Oraclewhere条件之后:

Rownum <n

Rownum <=n

1开始,查n

Sql serverselect之后:

Select top n [precent] 列名1,列名2

Top是关键字,n显示行数,precent返回前n%的行数,是可选的。

如果n=10,没有precent就是返回结果的前10行,有precent是返回结果的前10%行。

Top语句还可以用于insertupdatedelete语句中。

猜你喜欢

转载自blog.csdn.net/selftranscendence/article/details/79970001