--测试 create table tb1(客户名称 varchar(10),数量 int) insert into tb1 select '001',90 union all select '002',50 union all select '002',40 union all select '001'90 union all select '002',50 union all select '001',100 --计算每个组的数量和 select 客户名称,数量=sum(数量) from tb1 group by 客户名称--结果: 001 280 002 140 --求出每个组中有重复的记录 select * from tb1 group by 客户名称,数量 having count(*)>1--结果: 002 50 001 90 ---------------- group by 字段名 --是以这个字段相同的值来分组 比如: id num 1 2 1 3 2 3 --如果你以id分组,就只有两个组,1和2 --如果以num分组,那就是2和3
id, money 1, 1 2, 2 1, 3 select id , sum(money) from table group by id --result id ,money 1, 4 2, 2 简单的说group by根据指定列将结果分组后合并,合并内容由聚合函数决定,上例中是sum函数
物以类聚,人以群分.分组group by 就是把相同的字段值放在一组里边进行统计.
楼上的大虾们都讲的很好呀,而且举的例子也很容易理解,小弟佩服,这下发帖子的mm应该懂了吧, 我也是才学sql,只不过我我懂group by 的意思,嘿嘿!!!!
create table tb1(客户名称 varchar(10),数量 int)
insert into tb1 select '001',90
union all select '002',50
union all select '002',40
union all select '001'90
union all select '002',50
union all select '001',100
--计算每个组的数量和
select 客户名称,数量=sum(数量) from tb1 group by 客户名称--结果:
001 280
002 140
--求出每个组中有重复的记录
select * from tb1 group by 客户名称,数量 having count(*)>1--结果:
002 50
001 90
----------------
group by 字段名 --是以这个字段相同的值来分组
比如:
id num
1 2
1 3
2 3 --如果你以id分组,就只有两个组,1和2
--如果以num分组,那就是2和3
1, 1
2, 2
1, 3
select id , sum(money) from table group by id
--result
id ,money
1, 4
2, 2
简单的说group by根据指定列将结果分组后合并,合并内容由聚合函数决定,上例中是sum函数
我也是才学sql,只不过我我懂group by 的意思,嘿嘿!!!!
select 后面的东西要么出现在group by后面,要么是聚合函数。
常用聚合函数:
SUM([ALL | DISTINCT] expression) 数字表达式中所有值的和
AVG([ALL | DISTINCT] expression) 数字表达式中所有值的平均值
COUNT([ALL | DISTINCT] expression) 表达式中值的个数
COUNT(*) 选定的行数
MAX(expression) 表达式中的最高值
MIN(expression) 表达式中的最低值
select * from tb1 group by 客户名称,数量 having count(*)>1--结果:
002 50
001 90这就是多分组
1 2 5
1 3 7
1 2 10
select a,b,max(c) from 表 group by a,b
得到:
1 2 10
1 3 7
--就是先以a分组,再以b分组。