您的位置:首页 > 数据库

sql Compute by语句用法

2008-09-28 10:45 901 查看
在对数据进行统计分析时,如果既需要保存查询结果,又能在查询结果下面将统计结果显示出来,就非常直观了。

Compute子句用于生成合计,并将其作为附加的汇总列出现在结果集的最后,当与by一起使用时,Compute子句在结果集内生成控件中断和分类汇总。可在同一查询内指定Compute by和Compute。
其语法格式如下:
[Compute[/b]
{[/b]
{Avg | count | max | min | stdev | stdevp| var | varp | sum (expression)}[,…n][/b]
[by expressin [,….]][/b]
}][/b]
[/b]
Compute子句中使用的聚合函数
行聚合函数结果
Avg数字表达式中所有值的平均值
Count选定的行数
Max最大值
Min最小值
Stdev统计值的标准偏差
Stdevp填充统计的标准偏差
Sum求和
Var统计方差
Varp填充统计方差
[/b]
注意:聚合函数不能使用字段别名。[/b][/b]
[/b]
Group by和Compute都可以汇总数据,但在结果集上还是存在区别的。

测试数据[/b][/b]
1 黄*通 男 1500.0 文档部
2 汤*美 女 1200.0 设计部
3 宋*坤 男 1000.0 设计部
5 吕*洋 女 800.0 文档部
8 赵*红 女 1200.0 文档部
10 李*林 男 2000.0 设计部
11 严*丹 男 1600.0 ASP部
12 孙*昭 男 1500.0 ASP部
13 沈*鹏 女 1400.0 ASP部
16 杨*月 女 1000.0 文档部

(1) [/b]select [/b]所属部门[/b],[/b]部门工资合计[/b]=sum([/b]工资[/b]) from [/b]工资表[/b] group by [/b]所属部门[/b][/b]
Group by生成单个结果集,每个组都有一个只包含分组依据和显示该组子聚合的聚合函数的行。
[/b]




(2) select * from [/b]工资表[/b] order by [/b]所属部门[/b] compute sum([/b]工资[/b])[/b]



Compute生成多个结果集。一类结果集包含每个组的明细行,其中包含选择列表中的表达达式。另一类结果集包含组的子聚合合,或Select语句的总聚合。

在asp.net 中的应用:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=(local);user id=sa;pwd=sa;Database=db_09");
con.Open();
string SqlStr = "select * from 工资表";
SqlDataAdapter ada = new SqlDataAdapter(SqlStr, con);
DataSet ds = new DataSet();
ada.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("server=(local);user id=sa;pwd=sa;Database=db_09");
con.Open();
string SqlStr = "select * from 工资表 order by 所属部门 compute sum(工资) ";
SqlDataAdapter ada = new SqlDataAdapter(SqlStr, con);
DataSet ds = new DataSet();
ada.Fill(ds);
GridView2.DataSource = ds.Tables[1].DefaultView;
GridView2.DataBind();
}

运行界面如下:



(3) [/b]使用Compute[/b]…[/b]by[/b]…[/b].[/b]子句[/b]

在对数据进行查询时,有时需要既能显示分组情况,又能将各组数据统计结果显示出来,利用Compute by语句可以轻松实现按组显示和统计数据.

select * from [/b]工资表 order by 所属部门 compute sum(工资) by 所属部门[/b]
注意:by关键字后的条件必须相同。上面都为所属部门[/b]
每个组的第一个结果集是明细记录,每个组的第二个结果集只包含一条记录。



在[/b]ASP.NET[/b]中的应用[/b]:[/b]
SqlConnection con = new SqlConnection("server=(local);user id=sa;pwd=sa;Database=db_09");
con.Open();
string SqlStr = "select * from 工资表 order by 所属部门 compute sum(工资) by 所属部门";
SqlDataAdapter ada = new SqlDataAdapter(SqlStr, con);
DataSet ds = new DataSet();
ada.Fill(ds);
GridView1.DataSource = ds.Tables[0].DefaultView;
GridView2.DataSource = ds.Tables[1].DefaultView;
GridView3.DataSource = ds.Tables[2].DefaultView;
GridView4.DataSource = ds.Tables[3].DefaultView;
GridView5.DataSource = ds.Tables[4].DefaultView;
GridView6.DataSource = ds.Tables[5].DefaultView;
GridView1.DataBind();
GridView2.DataBind();
GridView3.DataBind();
GridView4.DataBind();
GridView5.DataBind();
GridView6.DataBind();
界面如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: