一个group by 的简单问题(初学)

supergerm 2004-09-18 01:39:03
有一个表叫 XXX
表中三个字段分别 a, b, c

select * from XXX group by a

这句的错误出在哪?
...全文
219 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxhlizhenhao 2004-09-20
  • 打赏
  • 举报
回复
select 后面的列名,要么存在有聚合函数,要么在group by 后面存在
linmu_netboy 2004-09-20
  • 打赏
  • 举报
回复
-->简单的理解:
对于 select * from XXX group by a 的用法中,
select 后面出现的查询字段,如select a,b,c ,max(d)中的a,b,c都必须出现在group by 后面的字段中,而max(d)中的d因为在聚合函数max()中,所以不需要在group by中也出现。
所以 正确的是select a,b,c from XXX group by a,b,c或者
select a,max(b) as b,max(c) as c from XXX group by a 或者
select a, b=max(b), c=max(c) from XXX group by a
等等。
xiaoxiangqing 2004-09-20
  • 打赏
  • 举报
回复
select a,max(b) as b,max(c) as c from XXX group by a

select a,min(b) as b,min(c) as c from XXX group by a

select a from XXX group by a
chen319305 2004-09-20
  • 打赏
  • 举报
回复
select * From xxx where a in (select a From xxx group by a)
hglhyy 2004-09-19
  • 打赏
  • 举报
回复
可以参考下联机丛书!
dnvodcwan 2004-09-19
  • 打赏
  • 举报
回复
Group by 是用于分组统计,也是就是说你的Select 一般是会有统计函数,
对于你上面的语句因为没有函数, 所以一定要这样写没有错:
select a,b,c from xx group by a,b,c
建议你下载一个联机帮助,
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=a6f79cb1-a420-445f-8a4b-bd77a7da194b
jabcf 2004-09-19
  • 打赏
  • 举报
回复
select * from XXX order by a
funsuzhou 2004-09-19
  • 打赏
  • 举报
回复
要用group by进行分组,那么select 的字段要么必须同时出现在group by 里,如:
select a,b,c from table1 group by a,b,c

要么是聚合函数,如:
select a,b,c,d=max(d) from table1 group by a,b,c

常用的聚合函数:
AVG(expr) 列值的平均值。该列只能包含数字数据。
COUNT(expr), COUNT(*) 列值的计数(如果将列名指定为 expr)或是表或组中所有行的计数(如果指定 *)。COUNT(expr) 忽略空值,但 COUNT(*) 在计数中包含空值。
MAX(expr) 列中最大的值(文本数据类型中按字母顺序排在最后的值)。忽略空值。
MIN(expr) 列中最小的值(文本数据类型中按字母顺序排在最前的值)。忽略空值。
SUM(expr) 列值的合计。该列只能包含数字数据。
qxq321 2004-09-18
  • 打赏
  • 举报
回复
同意楼主说的。
Visual_Studio_Net 2004-09-18
  • 打赏
  • 举报
回复
如果a也聚合了,就不需要group by了
supergerm 2004-09-18
  • 打赏
  • 举报
回复
有那么一点懂了~ 那么请问~

select a, b=max(b), c=max(c) 中的 a 为什么不要聚合?
zhangzs8896 2004-09-18
  • 打赏
  • 举报
回复
如果有group by,则未放在group by中的字段,都要放在聚合函数中.
这个很容易理解吧
有一个表叫 XXX
表中三个字段分别 a, b, c

select * from XXX group by a

--你的查询中有a,b,c而你只把a放在group by 中,b,c即没在聚合函数中,也没在group by 中了

要么你这么做:
select * from XXX group by a ,b,c
或者
select a,b=max(b),c=max(c) from XXX group by a --其中的max()是聚合函数中的一种。
yxs001 2004-09-18
  • 打赏
  • 举报
回复
select a,sum(b),max(c) from XXX group by a
group by 按一定的条件对查询到的结果进行分组,再对每一组数据计算(统计)的信息,也就是a字段的值没有相同的
supergerm 2004-09-18
  • 打赏
  • 举报
回复
zjcxc 请说详细一点行吗? 不太懂你的意思。谢谢
zjcxc 元老 2004-09-18
  • 打赏
  • 举报
回复
如果有group by,则未放在group by中的字段,都要放在聚合函数中.
zjcxc 元老 2004-09-18
  • 打赏
  • 举报
回复

select a,b=max(b),c=max(c) from XXX group by a
Andy__Huang 2004-09-18
  • 打赏
  • 举报
回复
select a, b, c=sum(c) from XXX group by a,b
select a, b, c=max(c) from XXX group by a,b

不進行求和,求平均值,最大,最小值的字段都要進行分組。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧