1、创建测试表,
create table test_group_cols(id number, value varchar2(20), remark varchar2(20));
2、插入测试数据
insert into test_group_cols values(1,'15y','rmk1');
insert into test_group_cols values(2,'15y','rmk1');
insert into test_group_cols values(3,'25x','rmk2');
insert into test_group_cols values(3,'333','rmk4');
insert into test_group_cols values(3,'666','rmk3');
insert into test_group_cols values(4,'35s','rmk1');
insert into test_group_cols values(4,'77','rmk1');
3、查询该表的所有字段,select t.*, rowid from user_tab_cols t where table_name = upper('test_group_cols'),可以发现共有3个字段,
4、编写sql,按id字段进行分组,select id, count(*) from test_group_cols t group by id,
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
group by 也可以同时使用多个字段进行分组
例子:
假设一个表tab有一个id字段、一个Name字段,内容如下
id Name
3 张三
5 李四
1 王五
1 赵六
sql 语句
select * from tab group by id
这条SQL的结果应该是
id Name
1 王五
3 张三
5 赵六
第一个Name显示的是王五 因为sql group by满足条件的有多个时是取第一个的
上面的结果并没有什么实际意义 group by 一般结合合计函数一起使用
比如 sql语句
select id, count(*) total from tab group by id
用于统计每个id有多少个
结果
id total
1 2
3 1
5 1
select * from 表名 group by 字段
一定会报错的,select 后面1 是分组的字段,要么是聚合函数 max min sum arg 等
你分组是要进行汇总统一计吗?要是这样的话,你就加聚合函数就好 了
group by 必须搭配 聚组函数一起使用。使用order by ,可以达到你要的效果
select * from 表
group by 其中一个字段名称