Top 和 percent 限制查询结果
查询前10名的数据 “select top 10* from biao order by 现存数量 desc”
查询前%10的数据 “select top 10 percent * from biao order by 现存数量 desc”
注意:top n 中用 order by 返回查询结果前N行,但不删除重复组(如果有另二条记录有相同的值,将得到N+2条),按升序排列一般在order by子句后加ASC谓词,也可省略,默认是升序。
取出数据统计结果前10名数据
在本实例中使用sum和group by 子句来实现取出统计结果前10名的功能
Sum函数用来计算一个数值表达式的总和,该函数把数值表达式中所有的非空值相加,然后向结果集返回最后得到的总数。需要注意的是,如果所有行的值表达式都为空或者from子句和where子句返回一个空的结果集,那么sum函数会返回一个空值。
Group by 子句可将数据行依据设置的条件,分成数个组群(group),并且让select子句中所有使用的聚集函数(如,sum,count ,min,min,max,avg等)产生作用
Select top 10 书号,书名,sum(销售数量) as 合计销售数量 from biao group by 书号,书名,作者 order by 3 desc
注意:order by 3就是order by 合计销售数量,使用sum函数时必须计算总值的列数据类型为数字型,SQL将忽略(NULL)值,即不计算为NULL的值
在select 子句的字段列表中除了聚集函数外,其他所出现的字段一定要在group by 子句中有定义才行
在select 子句的字段列表中不一定要有聚集函数,但至少要用到group by 子句列表中的一个项目 例:group by a,b,c 则select a 是可以的
在sql server 中text、ntext和image数据类型的字段不能作为group by 子句的分组依据。
Group by子句不能使用字段别名。
查询销售量占前50%的图书信息
Select top 50 percent 书号,书名,sum(销售数量) as 合计销售数量 from biao group by 书号,书名,作者 order by 3 desc
查询库存数量占后20%的图书信息 select top 20 percent * from biao order by 现存数量 asc