SQL语言基础(3)
GROUP BY子句
指定查询结果的分组条件
语法:GROUP BY [ALL] group_by_expression_r_r [,n]
[WITH{CUBE|ROLLUP}]
group_by_expression_r_r指明分组条件,通常是一个列名,但不能是列的别名。
ALL返回所有查询结果的组合。如果没有满足where子句的数据则由NULL值构成数据。ALL的选项不能与cube或rollup选项同时使用。
cube:除了返回由GROUP BY指定的列外,还返回按组统计的行。返回结果先按第一个条件列排序显示,再按第二个条件列排序显示,以此类推。统计列包括了各种组合的数据统计。
rollup:对GROUP BY中列的顺序敏感,只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结果的行数发生变化。
注意使用group by子句时后面的变量要和select后相一致,没有包含在聚合函数中的变量都应该作为group by后的变量。
HAVING 子句指定分组搜索条件。通常和group by一起使用
HAVING子句和WHERE很相似,但WHERE子句作用于表和视图,HAVING子句作用于组。
SELECT DEPT_ID,COUNT(*)
from EMPLYEE
WHERE E_WAGE>=6000
GROUP BY DEPT_ID
HAVING COUNT(*)>1;其中COUNT(*)表示满足条件的元素个数。
ORDER BY子句,指定查询结果的排序方式,默认升序ASC降序DESC
查询工资最高的三名员工
select top 3 e_name,e_wage
from employee
order by e_wage desc;
compute子句:在查询结尾的末尾生成一个汇总数据行。
compute{{AVG|COUNT|MAX|MIN|SUM} (expression_r_r [...,n]) [by expression_r_r[...,n]]}这些函数会忽略NULL值,并且DISTINCT选项不能在此使用。
expression_r_r必须包含在select的选项里,并且不能使用别名。
by expression_r_r在查询结果中生成分类统计的行,如果使用,必须使用order by子句,expression_r_r对应order by子句的一部分或全集。
如:select 员工姓名,所属部门,工资
from 员工数据表
order by 所属部门
compute sum(工资) by 所属部门
结果会出现在每个所属部门分组后有一个计算sum的行
聚合函数:AVG,SUM,MIN,MAX,COUNT
COUNT(*)计算表中的行数,一样的都计算上。COUNT(DISTINCT)计算不同的行数
汇总函数忽略NULL值。
以上几个子句中数据类型不能为text,ntext,image或bit类型。
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
问题:
有一个分数表
id classid,score
1 01 120
2 01 128
3 02 98
4 04 134
5 04 78
现在要统计 各班score >120,和大于90分的人数
达到如下效果
classid >120 >90
01 &nb ......
if(query.getIsScrapAlert()!=null&&query.getIsScrapAlert()==1){
//criteria.add(Expression.sql(" add_months(this_.D_RECEIVE_DATE,this_.N_DEPRECIABLE_LIFE*12)<add_months(sysdate,-3) "));
criteria.add(Expression.sql(" ((add_months(this_. ......
导出:
直接打开查询分析器查询要导出表的信息(select * from 表),得到的结果全选,右键另存为 xxx.csv文件 (得到该表的所有信息,CSV文件格式)
导入:
首先通过sql server 的企业管理器生成要导出表的 SQL脚本,步骤:要导出表——所有任务(右键)——生成SQL脚本
得到该表的 ......