sqlserver2008,sql编程,group by 用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver2008,sql编程,group by 用法相关的知识,希望对你有一定的参考价值。

select OperateUser, AccountName, Operatetime, Recorddate, Income, Expense, Balance, Remark
from FmAcountOperateRecord GROUP BY AccountName order by Operatetime
不知道错在哪?请高手指教?

正确无误的写法应该为:
select OperateUser, AccountName, Operatetime, Recorddate, Income, Expense, Balance, Remark
from FmAcountOperateRecord
GROUP BY OperateUser, AccountName, Operatetime, Recorddate, Income, Expense, Balance, Remark
order by Operatetime

这个结果集中 列出的
OperateUser, AccountName, Operatetime, Recorddate, Income, Expense, Balance, Remark
八个字段完全相同的结果将被合并不进行重复显示

如果这八个字段中,有一些字段你又不想关心它的重复值,又想让它们合并为一条输出,那是“不科学”的,不被充许的,机器无法知道它应该显示数据表里的哪条记录上的值。理由你自个细想想就明白了。

**********************************************************************************************************************
****如果你有耐心,可参看下面的详解。在教你的同时,我也在复习,我们共同进步。****

你需要理解 GROUP BY 的含义和使用情景,这样知道什么时候用它,该不该用它。

GROUP BY 它的字面意义为“分组统计”,一般用于选择出的记录结果中,有完全相同的重复记录。

比如数据库表如下:
字段 A1 A2 A3 A4 A5
数据 张红 数学 81 及格 期中
数据 刘梅 数学 61 及格 期中
数据 王飞 语文 85 及格 期中
数据 吴青 数学 35 不及格 期中
数据 周远 语文 71 及格 期中
数据 赵强 数学 52 不及格 期中
数据 张红 数学 91 及格 期未
数据 刘梅 数学 73 及格 期未
数据 王飞 语文 88 及格 期未
数据 吴青 数学 65 及格 期未
数据 周远 语文 75 及格 期未
数据 赵强 数学 50 不及格 期未

上面这张示意数据表可用GROUP BY来分组统计下面的信息:
每同学期中、期未的成绩总分
SELECT A1,A2,SUM(A3) GROUP BY A1,A2
解说:此统计中,A3作为分组相加的字段,所以用SUM(A3)。A4、A5是不能列入的,一但列入结果集中如去除SUM(A3)作为关心字段后,没有重复结果集,也就失去了分组的意义,虽能得到结果,但没有意义。比如:SELECT A1,A2,A4,A5,SUM(A3) GROUP BY A1,A2,A4,A5

同理,可求上表中语文、数学的期中、期未的分别总分:
SELECT A2,A5,SUM(A3) GROIP BY A2,A5
此时,就会先把A2、A5相同的分组进行求和,得到的就是语文、数学的期中、期未的总分。

使用 GROUP BY 可以不要统计的概念。但所有的SELECT出的字段,除要参与统计的外,别的都要在GROUP BY后列出。GROUP BY后列出的字段表示它们是标志性的,它们的值“不同”时不能被合并,它们是被关心的。
参考技术A 语句中有group by的话,说明是进行分组聚合查询,因此select后的属性只能是group by后面的分组属性和在其它字段上的聚合函数结果(avg平均值,sum求和,count计数等),而order by后的属性也必须是分组属性或聚合结果,因为此时是对分组后的结果进行排序。
group by相当于对数据分组,分组属性有多少各不同的值就有多少各分组,每个分组是结果集中一条记录追问

我只是要分组显示,不要统计?
还有别的办法吗

追答

每个分组只能显示一条记录,你用AccountName 分组了,要显示的其他数据是什么?
如果想显示所有的记录,而其中AccountName 连续显示的话你可以加一个order by属性:
select OperateUser, AccountName, Operatetime, Recorddate, Income, Expense, Balance, Remark
from FmAcountOperateRecord order by AccountName, Operatetime

本回答被提问者和网友采纳
参考技术B GROUP BY AccountName

OperateUser Operatetime, Recorddate?追问

不明白?

参考技术C select OperateUser, AccountName, Operatetime, Recorddate, Income, Expense, Balance, Remark
from FmAcountOperateRecord GROUP BY AccountName
,OperateUser, Operatetime, Recorddate, Income, Expense, Balance, Remark
order by Operatetime

sqlserver2008,sql编程,group by 用法

参考技术A 语句中有group
by的话,说明是进行分组聚合查询,因此select后的属性只能是group
by后面的分组属性和在其它字段上的聚合函数结果(avg平均值,sum求和,count计数等),而order
by后的属性也必须是分组属性或聚合结果,因为此时是对分组后的结果进行排序。
group
by相当于对数据分组,分组属性有多少各不同的值就有多少各分组,每个分组是结果集中一条记录

以上是关于sqlserver2008,sql编程,group by 用法的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver2008,sql编程,group by 用法

sql server 2008 group_Concat() 版本但是在不同的列中(不是逗号分隔)

sql server 2008,如何查看存储过程里面的内容?

关于sqlserver 数据库的group分组问题,在线等待回答

MS SQL Server该如何入门呢

数据库SQL server 2008 R2和SQL server 2008 能一起安装吗?为啥安装完只剩SQL server 2008 R2一个了?