SQL如何查询一张表的所有字段并按其中一个字段进行分组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何查询一张表的所有字段并按其中一个字段进行分组相关的知识,希望对你有一定的参考价值。

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,

参考技术A 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
参考技术B select * from 表名 group by 字段
一定会报错的,select 后面1 是分组的字段,要么是聚合函数 max min sum arg 等
你分组是要进行汇总统一计吗?要是这样的话,你就加聚合函数就好 了
参考技术C group by 必须搭配 聚组函数一起使用。使用order by ,可以达到你要的效果 参考技术D select * from 表
group by 其中一个字段名称

sql语句从一张表查询一个字段值插入另一个表中

如:insert into a(name, num, class) value("小米",“1001”, class);
class的值是从表b中获取:select class from b where name = “小米”;
如何将上面合成一条sql语句,数据库mssql,求指导

标准SQL语句格式:

INSERT 

INTO 表名(字段名)

select 字段名

from 表面

例子:将查询出的s表中sno,j表中jno,p表中pno插入spj表中

insert 

into spj(sno,jno,pno)

select sno,jno,pno

from s,j,p


扩展资料:

SQL导入语句

如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句:

insert into openrowset('MSDASQL', 

'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\\', 

'select * from [aa.DBF]') 

select * from 表

说明:

SourceDB=c:\\ 指定foxpro表所在的文件夹 

aa.DBF 指定foxpro表的文件名。

参考技术A insert into a(name,num,class) values('小米','1001',(select class from b where name = '小米'));

追问

这样也不行呀 这样的话整条都插不进去

追答

是不是表b中name等于小米的class值不止一个?如果这样的话你必须保证等于小米的class是一个值,上述语句才可以.

追问

sql语句错误:在此上下文中不允许使用子查询。只允许使用标量表达式。显示的是这样的

追答

是哪个环境?SQL Server还是oracle?

追问

解决了,是这样写insert into a(name,num,class) select '小米','1001',class from b where name = '小米';

本回答被提问者和网友采纳
参考技术B http://zhidao.baidu.com/link?url=jcAjwsJyCud_GET0-RpXIp754kTnJQU00L6RRe2gbXbvfKfYgnHoWtM2z4YVrgt-ZzBpTlSwPNOJ2g5PcAwSMK追问

我和他的不一样,表a中是有其他数据插入的,只查询表b中的一个字段的值

追答insert into a(name,num,class) values('小米','1001',(select top 1 class from b where name = '小米'));

追问

sql语句错误 在此上下文中不允许使用子查询。只允许使用标量表达式。

参考技术C insert into a(产品,编号, 类型)
select 产品,编号, 类型 from b
where 产品=‘小米’

以上是关于SQL如何查询一张表的所有字段并按其中一个字段进行分组的主要内容,如果未能解决你的问题,请参考以下文章

sql查询的一个字段是另一张表的数量,怎么把查询到的数量直接在下一个字段使用

sql中如何 将一张表的数据 更新到另外一张表的字段中

sql存储过程从一张表中查询到的值作为另一张表的新的字段

SQL SERVER,一张表中,有多个字段关联另一张表,怎么写SQL语句?

SQL问题,怎么将一张表的某个字段更新为另一张表的字段

sql语句 怎么从一张表中查询数据插入到另一张表中